Ответ 1
double?
является только сокращением для Nullable<double>
; в основном, double
, который может быть null
. Но код не очень безопасен. Если actual
- null
, (double)actual
выдаст исключение.
Возможный дубликат:
С# newbie: что? Разница между "bool" и "bool?" ?
Привет, Читая код класса утверждения проекта NUnit, я наткнулся на эту конкретную конструкцию -
public static void AreEqual(double expected, double? actual, double delta)
{
AssertDoublesAreEqual(expected, (double)actual, delta ,null, null);
}
В этой функции второй входной параметр вводится как double?
.
Интересно, что этот код компилируется без проблем в VS2010 (С# 4.0).
Кто-нибудь знает, почему это НЕ выбрасывает ошибку? Почему double?
считается допустимым ключевым словом и имеет ли какое-либо особое значение значение ?
.
double?
является только сокращением для Nullable<double>
; в основном, double
, который может быть null
. Но код не очень безопасен. Если actual
- null
, (double)actual
выдаст исключение.
Это тип с нулевым значением. Таким образом, это двойной, который также может быть нулевым.
Подробнее см. здесь.
Я считаю, что это означает, что этот параметр также можно назвать нулевым.
Синтаксис T? является сокращением для System.Nullable. Следующая строка кода объявляет тип NULL.
double? actual =null;
Вы не можете назначать значения NULL для типов значений .NET(structs), включая примитивные типы С#, такие как int и double, поэтому в .NET 2.0 добавлена концепция типа nullable для назначения нулевого значения.
например:
int? num = null;
if (num.HasValue == true)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
}