2013-07-05 3 views
3

Я хотел бы спросить о Convert.ToDouble и Double.Parse в C#
Когда я пишу этот код, это нормальноConvert.ToDouble и Double.Parse в C#

static void Main(string[] args) 
    { 
     double red; 
     Console.Write("Red = "); 
     red = Convert.ToDouble(Console.ReadLine()); 
    } 

но если я пытаюсь

static void Main(string[] args) 
    { 
     double red; 
     Console.Write("Red = "); 
     red = Double.Parse(Console.ReadLine()); 
    } 

Я предостерегаю от ReSharper 'Possible 'null' assignment to entity marked with 'NotNull' attribute'
Как это исправить?

+0

Какие параметры компилятора вы используете, чтобы увидеть это предупреждение? –

+5

Звучит как предупреждение ReSharper. –

+0

Да, на самом деле это не предупреждение, это предостережение от ReSharper. – Heidel

ответ

12

double - value type, который не может быть null.

double.Parse попытается разобрать string в double. Он не пытается принуждать несовпадающие значения, такие как null.

Convert.ToDouble попытается взять несогласованные строки и найти подходящее значение. Для null это будет 0.0.

Чтобы проверить, является ли укус прямым анализом, попробуйте использовать double.TryParse с соответствующей перегрузкой.

Например:

double red; 
Console.Write("Red = "); 
var input = Console.ReadLine(); 

if(!double.TryParse(input, out red)) 
{ 
    Console.WriteLine("You have not entered an appropriate value!"); 
} 

Это будет пытаться разобрать двойной с использованием текущего Culture и по умолчанию NumberStyles.

+0

Большое спасибо за ур объяснение! Но что я должен добавить, если я хочу использовать 'double.Parse' в моем коде? – Heidel

+5

Вместо этого используйте 'double.TryParse'. См. Мое редактирование. – Romoku

4

Convert.ToDouble - способ использования.

Convert.ToDouble документация объясняет:

тип возвращаемого значения: System.Double с двойной точностью с плавающей точкой число, которое эквивалентно значению, или ноль, если значение равно нулю.

Double.Parse выбросит ArgumentNullException, если передать нуль, так как Double не может быть построена с null. Разъясняется здесь: http://msdn.microsoft.com/en-us/library/fd84bdyt.aspx

Смежные вопросы