Я заметил в другом посте, что кто-то сделал что-то вроде:
double d = 3.1415;
int i = Convert.ToInt32(Math.Floor(d));
Почему они использовали функцию преобразования, а не:
double d = 3.1415;
int i = (int)d;
который имеет неявный пол и преобразование.
Кроме того, что более важно, я заметил в некотором производственном коде, который читал:
double d = 3.1415;
float f = Convert.ToSingle(d);
Это то же самое, что:
float f = (float)d;
Являются ли все эти неявные преобразования только в классе Convert для полноты, или они служат какой-то цели? Я могу понять потребность в .ToString (), но не в остальном.





Вы можете использовать Convert, если у вас есть строка, которую вы хотите преобразовать в int
int i = Convert.ToInt32("1234");
Преобразование и преобразование вызовут исключение, если они потерпят неудачу.
то есть это все равно вызовет исключение, оно не вернет 0:
Convert.ToInt32("1234NonNumber");
Во многих случаях преобразование и преобразование будут иметь один и тот же результат, но преобразование часто легче читать.
Int32.Parse преобразует "числовую" строку в int и вызовет исключение, если преобразование завершится неудачно. Int32.TryParse вернет false, если преобразование завершится неудачно, а Convert.ToInt32 вернет 0, если преобразование завершится неудачно.
Преобразование в int - это неявное усечение, а не неявное перекрытие пола:
double d = -3.14;
int i = (int)d;
// i == -3
Я выбираю Math.Floor или Math.Round, чтобы сделать мои намерения более ясными.
Convert.ToInt32 () используется для строк (http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx), в то время как приведение может использоваться только для типов, которые имеют внутренние преобразователи (числовые типы). Настоящая уловка заключается в выборе между Int32.Parse и Convert.ToInt32 (). Convert.ToInt32 () допускает нулевой параметр и возвращает 0, в то время как Int32.Parse () генерирует исключение ArgumentNullException.
Округление также обрабатывается по-другому:
x = -2,5 (целое) x = -2 Преобразовать в Int32 (x) = - 2
x = -1,5 (целое) x = -1 Преобразовать в Int32 (x) = - 2
x = -0,5 (целое) x = 0 Преобразовать в Int32 (x) = 0
x = 0,5 (int) x = 0 Преобразовать в Int32 (x) = 0
x = 1,5 (целое) x = 1 Преобразовать в Int32 (x) = 2
x = 2,5 (целое) x = 2 Преобразовать в Int32 (x) = 2
Обратите внимание на случаи x = -1,5 и x = 1,5. В некоторых алгоритмах метод округления имеет решающее значение для получения правильного ответа.
Не преобразует ли Int32.Parse (String): Int32 строку в int?