Подтвердить что ты не робот

Что делает двойной? означает в С#?

Возможный дубликат:
С# 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? считается допустимым ключевым словом и имеет ли какое-либо особое значение значение ?.

4b9b3361

Ответ 1

double? является только сокращением для Nullable<double>; в основном, double, который может быть null. Но код не очень безопасен. Если actual - null, (double)actual выдаст исключение.

Ответ 2

Это тип с нулевым значением. Таким образом, это двойной, который также может быть нулевым.

Подробнее см. здесь.

Ответ 3

Я считаю, что это означает, что этот параметр также можно назвать нулевым.

Ответ 4

Синтаксис 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");
        }