Как правило , основное назначение знака вопроса для условного, x ? "yes" : "no"
.
Но я видел другое использование для этого, но не могу найти объяснение этого использования ?
оператора, например.
public int? myProperty
{
get;
set;
}
Это означает, что рассматриваемый тип значения является обнуляемым типом.
Обнуляемые типы являются экземплярами структуры System.Nullable. Обнуляемый тип может представлять правильный диапазон значений для его базового типа значения, а также дополнительное нулевое значение. Например,
Nullable<Int32>
объявленному «Nullable of Int32» может быть присвоено любое значение от -2147483648 до 2147483647, или ему может быть присвоено нулевое значение. ANullable<bool>
может быть присвоено значение true, false или null. Возможность присваивать значение null числовому и логическому типам особенно полезна, когда вы имеете дело с базами данных и другими типами данных, которые содержат элементы, которым может не быть присвоено значение. Например, логическое поле в базе данных может хранить значения true или false, или оно может быть неопределенным.class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
int
тип и соответствующийInteger
класс, например.Это сокращение для
Nullable<int>
.Nullable<T>
используется, чтобы позволить типу значения быть установленнымnull
. Типы значений обычно не могут быть нулевыми .источник
value types
не может быть нулевым. Если вы объявляете int или bool (которые являются типами значений) без специального присваивания значения, они все равно будут иметь значения (0 и false соответственно), т.е. они не будут нулевыми. Неназначенныеreference types
, такие как object или MyClass, будут, с другой стороны, равны нулю. Вы можете прочитать разницу между типами значений и ссылочными типами.В
? объявляет предложение if . Здесь: x представляет логическое условие; Часть до : это предложение then, а часть после это предложение else .
Например, в
? объявляет обнуляемый тип и означает, что тип перед ним может иметь нулевое значение.
источник
return value ? value : "isNull";
говорит мне, чтоstring value
не конвертируется в bool.источник
он объявляет, что тип обнуляем.
источник
практическое использование:
источник
Чтобы добавить к ответам выше, вот пример кода
Это даст ошибку компиляции:
Обратите внимание, что нет ошибки компиляции для NullableTest. (обратите внимание на? в декларации t2)
источник
int?
это сокращение дляNullable<int>
. Две формы взаимозаменяемы.Nullable<T>
является оператором, который вы можете использовать с типом значения,T
чтобы заставить его принятьnull
.Если вы этого не знаете: типы значений - это типы, которые принимают значения как
int
,bool
иchar
т. Д.Они не могут принимать ссылки на значения: они будут генерировать ошибку во время компиляции, если вы назначите им a
null
, в отличие от ссылочных типов , которые, очевидно, могут принять это.Зачем вам это нужно? Потому что иногда ваши переменные типа значения могут получать нулевые ссылки, возвращаемые чем-то, что работает не очень хорошо, например отсутствующей или неопределенной переменной, возвращаемой из базы данных.
Я предлагаю вам прочитать документацию Microsoft, потому что она достаточно хорошо освещает эту тему.
источник