Обнуляемые типы переменных - член .value - PullRequest
7 голосов
/ 30 июля 2009

Мне было интересно - когда я захочу использовать член .Value для типа NULL, вместо простого вызова самой переменной?

.. * например 1003 *

BOOL? b = true;

почему я должен использовать значение b.Value вместо того, чтобы просто использовать b? Какое преимущество или функцию добавляет вызов .Value?

Ответы [ 5 ]

13 голосов
/ 30 июля 2009

Свойство value доступно только для чтения и возвращает фактический тип значения. Свойство value никогда не может быть нулевым.

Если вы ожидаете возврата значения, равного null, то проверьте .HasValue, а затем ссылку на значение. Например, если вы хотите присвоить значение Nullable обычному bool, то вам нужно сослаться на его значение:

bool? nullableBool = null;

if (nullableBool.HasValue)
{
    bool realBool = nullableBool.Value;
}

Однако следующее не будет скомпилировано:

bool? nullableBool = true;
bool realBool = nullableBool; // Won't work
3 голосов
/ 30 июля 2009

. Значение возвращает bool, а не bool? что позволит вам использовать его в качестве параметра для функций, которые не ожидают обнуляемых типов.

2 голосов
/ 30 июля 2009

Когда вы хотите использовать методы / свойства базового типа.На самом деле не относится к bool.Позвольте мне проиллюстрировать с помощью DateTime:

DateTime? d;
int month = d.Value.Month;

Вы не можете получить доступ к свойству Month напрямую из d, потому что DateTime?не имеет этого свойства.

1 голос
/ 30 июля 2009

Для меня это не столько ценность, сколько свойство "HasValue", которое я считаю полезным

1 голос
/ 30 июля 2009

Разница лишь в том, что они 2 разных типов. Если у вас есть bool? , тогда это тип допускаемого как булл.

Если вы звоните b.Value , вы фактически возвращаете bool , а не bool? .

Тонко, но когда вам нужна ненулевая версия объекта, используйте свойство .Value.

...