Вопрос по c#, types – System.Convert.ToInt vs (int)

12

Я заметил в другом посте, кто-то сделал что-то вроде:

<code>double d = 3.1415;
int i = Convert.ToInt32(Math.Floor(d));
</code>

Почему они использовали функцию преобразования, а не:

<code>double d = 3.1415;
int i = (int)d;
</code>

который имеет неявный пол и конвертировать.

Кроме того, более подробно, я заметил в некотором производственном коде, который я читал:

<code>double d = 3.1415;
float f = Convert.ToSingle(d);
</code>

Это так же, как:

<code>float f = (float)d;
</code>

Являются ли все эти неявные преобразования просто в классе Convert для полноты или они служат цели? Я могу понять необходимость .ToString (), но не все остальное.

Ваш Ответ

4   ответа
1

когда у вас есть строка, которую вы хотите преобразовать в int

int i = Convert.ToInt32("1234");

Преобразование и приведение приведут к исключению, если они потерпят неудачу.

то есть, это все равно выдаст исключение, оно не вернет 0:

Convert.ToInt32("1234NonNumber");

Во многих случаях Преобразование и приведение приведут к одному и тому же результату, но приведение часто будет легче читать.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3


x = -2.5 (int) x = -2 Convert.ToInt32 (x) = - 2
x = -1.5 (int) x = -1 Convert.ToInt32 (x) = - 2
x = -0.5 (int) x = 0 Convert.ToInt32 (x) = 0
x = 0.5 (int) x = 0 Convert.ToInt32 (x) = 0
x = 1,5 (int) x = 1 Convert.ToInt32 (x) = 2
x = 2.5 (int) x = 2 Convert.ToInt32 (x) = 2

Обратите внимание на случаи x = -1,5 и x = 1,5.
В некоторых алгоритмах используемый метод округления имеет решающее значение для получения правильного ответа.

12

double d = -3.14;
int i = (int)d;
// i == -3

Я выбираю Math.Floor или Math.Round, чтобы сделать мои намерения более явными.

1

http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx) в то время как приведение может использоваться только для типов, которые имеют внутренние преобразователи (числовые типы). Настоящий трюк заключается в выборе между Int32.Parse и Convert.ToInt32 (). Convert.ToInt32 () допускает нулевой параметр и возвращает 0, тогда как Int32.Parse () генерирует исключение ArgumentNullException.

Похожие вопросы