Есть ли разница между типом? и обнуляется?


в C# являются nullable примитивные типы (т. е. bool?) просто псевдонимы для их тегом Nullable<T> тип или есть разница между ними?

9 51

9 ответов:

Если вы посмотрите на IL с помощью Ildasm, вы обнаружите, что они оба компилируются до Nullable<bool>.

нет никакой разницы между bool? b = null и Nullable<bool> b = null. Элемент ? это просто сахар синтаксиса компилятора C#.

чтобы получить доступ к значению bool? вам нужно сделать следующее:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

Примечание Вы не можете просто сделать:

if (myValue)
{
  hasValue = true;
}

Я удивлен, что никто еще не пошел к источнику (спецификации C#). Из §4.1.10 типы с нулевым значением:

тип nullable записывается T?, где T-базовый тип. Этот синтаксис является сокращением для системы.Nullable, и эти две формы могут использоваться взаимозаменяемо.

итак, нет, нет никакой разницы между этими двумя формами. (Предполагая, что у вас нет другого типа под названием Nullable<T> в любом из пространств имен, которые вы используете.)

A Nullable<T> - Это структура, состоящая из T и битового флага, указывающего, является ли T допустимым. А Nullable<bool> имеет три возможных значения: true, false и null.

Edit: Ах, я пропустил тот факт, что вопросительный знак после "bool" на самом деле был частью имени типа, а не индикатором того, что вы задавали вопрос :). Тогда ответ на ваш вопрос: "да, C# bool? - это просто псевдоним для Nullable<bool>".

A bool - тип значения, поэтому он не может содержать значение null. Если вы обернете любой тип значения с помощью Nullable<>, это даст ему эту способность. Кроме того, методы доступа к изменению значения дополнительных свойств HasValue и Value.

но на вопрос: Nullable<bool> и bool? - это псевдонимы.

нет никакой разницы. Вкратце:

нулевые примитивы-это просто обычные примитивы, завернутые в Nullable. Любые проявления противоположности - это просто компилятор и синтаксический сахар.

никакой разницы. Взгляните сюда:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

" синтаксис T? является сокращением для Nullable, где T-тип значения. Эти две формы взаимозаменяемы."