Кастинг и Convert.ToInt32 () ведут себя по-разному в C #? - PullRequest
0 голосов
/ 07 декабря 2011

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

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

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

Почему результат каста (int) отличается от Convert.ToInt32()?

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

Ответы [ 7 ]

8 голосов
/ 07 декабря 2011

В первой версии вы используете свойство 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)
3 голосов
/ 07 декабря 2011

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

2 голосов
/ 07 декабря 2011

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

1 голос
/ 07 декабря 2011

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

1 голос
/ 07 декабря 2011

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

1 голос
/ 07 декабря 2011

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

(int)TimeSpan.FromMinutes(5).TotalMilliseconds;
1 голос
/ 07 декабря 2011

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

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

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

...