В С# - нулевые примитивные типы (т.е. bool?
) просто псевдонимы для их соответствующего типа Nullable<T>
или есть разница между двумя?
Есть ли разница между типом? и Nullable <type>?
Ответ 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 - тип значения. Две формы взаимозаменяемы.