Кастинг и 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!