C# - Основной вопрос: Что'?'? [дубликат]

16
задан Daniel Daranas 26 April 2010 в 08:15
поделиться

7 ответов

Это сокращение от записи Nullable или Nullable . Обнуляемые значения используются с типами значений , которые не могут быть пустыми (они всегда имеют значение).

Кстати, это не относится к C # 4.

Вы можете назначить int? только int , если оно имеет значение, поэтому ваш код должен будет делать такие вещи, как:

int? n = 1;
int i = n ?? default(int); //or whatever makes sense

Также обратите внимание, что ] Nullable имеет два свойства: HasValue и Value , которые вы можете использовать для проверки того, установлено ли значение, и для получения фактического значения.

34
ответ дан 30 November 2019 в 15:21
поделиться

Это означает, что это тип, допускающий значение NULL .

Он позволяет присваивать нулевое значение таким типам значений, как int и DateTime. Это очень полезно с такими вещами, как необязательные поля в базе данных.

12
ответ дан 30 November 2019 в 15:21
поделиться

Он обозначает типы, допускающие значение NULL .

Полагаю, это C #, специфичный для C # 4.0?

Он был в C # с 2.0

5
ответ дан 30 November 2019 в 15:21
поделиться

Это сокращенный способ объявления реализации универсального класса Nullable , где T - значение, не допускающее значения NULL. тип.

Итак,

int? i = null;

совпадает с

Nullable<int> i = null;

Как упоминалось выше, Nullable предоставляет свойство HasValue, чтобы вы могли проверить, имеет ли i значение, прежде чем работать с ним. .

Интересное примечание: если вы приведете Nullable i = 3; к объекту, вы можете вернуть его к int или Nullable , потому что у него значение перед боксом. Если, однако, вы приведете Nullable i = null; к объекту, вы получите исключение NullReferenceException при обратном приведении к int, но вы можете выполнить приведение обратно к Nullable .

1
ответ дан 30 November 2019 в 15:21
поделиться

? - это тип значения, допускающий значение 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;
}

Но я предпочитаю ??

5
ответ дан 30 November 2019 в 15:21
поделиться

Попался обратите внимание на: [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;
1
ответ дан 30 November 2019 в 15:21
поделиться

Как говорили другие, после имени типа это означает тип, допускающий значение NULL.

? также используется в операторе условия.

int max = x > y ? x : y

Это эквивалент:

int max;
if( x > y )
{
  max = x;
}
else
{
  max = y;
}
1
ответ дан 30 November 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: