Есть ли разница между типом? и обнуляется?
в C# являются nullable примитивные типы (т. е. bool?
) просто псевдонимы для их тегом Nullable<T>
тип или есть разница между ними?
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-тип значения. Эти две формы взаимозаменяемы."