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

Есть ли разница между типом? и Nullable <type>?

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

bool? myValue = true;
bool hasValue = false;

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

Заметьте, что вы не можете просто сделать:

if (myValue)
{
  hasValue = true;
}

Ответ 4

Я удивлен, что никто не пошел к источнику (спецификация С#). Из § 4.1.1. Невозможные типы:

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

System.Boolean → допустимые значения: true, false

bool → псевдоним для System.Boolean

Nullable <BOOL> → допустимые значения: true, false, null

BOOL? → псевдоним для Nullable <bool>

Надеюсь, что это поможет.

Ответ 8

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

Ответ 9

Никакой разницы. Посмотрите здесь: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

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