Это сокращение от записи Nullable
или Nullable
. Обнуляемые значения используются с типами значений , которые не могут быть пустыми (они всегда имеют значение).
Кстати, это не относится к C # 4.
Вы можете назначить int?
только int
, если оно имеет значение, поэтому ваш код должен будет делать такие вещи, как:
int? n = 1;
int i = n ?? default(int); //or whatever makes sense
Также обратите внимание, что ] Nullable
имеет два свойства: HasValue
и Value
, которые вы можете использовать для проверки того, установлено ли значение, и для получения фактического значения.
Это означает, что это тип, допускающий значение NULL .
Он позволяет присваивать нулевое значение таким типам значений, как int и DateTime. Это очень полезно с такими вещами, как необязательные поля в базе данных.
Он обозначает типы, допускающие значение NULL .
Полагаю, это C #, специфичный для C # 4.0?
Он был в C # с 2.0
Это сокращенный способ объявления реализации универсального класса Nullable
, где T - значение, не допускающее значения NULL. тип.
Итак,
int? i = null;
совпадает с
Nullable<int> i = null;
Как упоминалось выше, Nullable
предоставляет свойство HasValue, чтобы вы могли проверить, имеет ли i
значение, прежде чем работать с ним. .
Интересное примечание: если вы приведете Nullable
к объекту, вы можете вернуть его к int или Nullable
, потому что у него значение перед боксом. Если, однако, вы приведете Nullable
к объекту, вы получите исключение NullReferenceException при обратном приведении к int, но вы можете выполнить приведение обратно к Nullable
.
?
- это тип значения, допускающий значение NULL.
Вы можете использовать оператор ??
, чтобы смешать его с типами значений:
const int DefaultValue = -1;
// get a result that may be an integer, or may be null
int? myval = GetOptionalIdFromDB();
// the value after ?? is used if myval is null
int nonNullable = myval ?? DefaultValue;
Тип, допускающий значение NULL, можно сравнить с NULL, поэтому приведенное выше сокращение для:
if( myval != null ) {
nonNullable = myval.Value;
} else {
nonNullable = DefaultValue;
}
Но я предпочитаю ??
Попался обратите внимание на: [edit: очевидно, это случается только иногда]
// nullable type properties may not initialize as null
private int? foo; // foo = 0
// to be certain, tell them to be null
private int? foo = null;
Как говорили другие, после имени типа это означает тип, допускающий значение NULL.
? также используется в операторе условия.
int max = x > y ? x : y
Это эквивалент:
int max;
if( x > y )
{
max = x;
}
else
{
max = y;
}