Кастинг и Convert.ToInt32() ведут себя по-разному в C#?

Вот простой фрагмент кода на C#:

Convert.ToInt32(TimeSpan.FromMinutes(5).TotalMilliseconds);
//which brings me 300000

(int)TimeSpan.FromMinutes(5).Milliseconds;
//which brings me 0

Зачем кастинг (int) результат отличается по сравнению с Convert.ToInt32()?

Не должны ли оба принести одинаковый результат?

7 ответов

Решение

В первой версии вы используете TotalMillisecondsсвойство - во втором вы используете Milliseconds,

Чтобы привести более простой пример, без приведения или вызова Convert.ToInt32:

TimeSpan ts = TimeSpan.FromHours(49);
Console.WriteLine(ts.Hours); // 1 (it's two days and one hour) 
Console.WriteLine(ts.TotalHours); // 49 (it's 49 hours in total)

Миллисекунды - это ТОЛЬКО миллисекундная ЧАСТЬ 5 секунд. Используйте TotalMilliseconds для второго.

В первом примере вы используете TotalMilliseconds, а затем просто Milliseconds.

Они такие же... вы использовали TotalMilliseconds против Milliseconds. Первый - это общее количество миллисекунд за 5 минут, а второй - остаток, или значение, которое будет отображаться, если вы хотите, чтобы IE времени отображало "000" в "00:05:00.000".

Вы пропустили "Всего" из второй строки. Итак, это работает.

(int)TimeSpan.FromMinutes(5).TotalMilliseconds;

Ваша ошибка в том, что во втором примере вы вызываете .Milliseconds собственность, а не .TotalMilliseconds имущество.

Первый возвращает 5 минут в миллисекундах. Последний возвращает миллисекундную часть 5 минут, которая равна нулю.

Состав против преобразования - красная сельдь!

Проблема не в конвертации, а в том, что вы сравниваете TotalMilliseconds и Milliseconds!

Другие вопросы по тегам