Тип переменной, заканчивающийся?

Что делает ? средний:

public bool? Verbose { get; set; }

При применении к string?, существует ошибка:

Тип 'строка' должен быть не допускающим NULL-значения типом значения для использования его в качестве параметра 'T' в универсальном типе или методе 'Система. Nullable'

11
задан abatishchev 29 June 2011 в 09:44
поделиться

7 ответов

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

Из MSDN , о типах значений:

В отличие от ссылочных типов, тип значения не может содержать нулевое значение. Однако функция типов, допускающих значение NULL позволяет типам значений быть присвоено значение null.

? в основном является сокращением для Nullable structure .

Если вы хотите узнать больше, в MSDN есть отличная статья по этой теме.

18
ответ дан 3 December 2019 в 00:59
поделиться

bool? - это сокращенная форма для System.Nullable . Для параметра типа принимаются только типы значений, а не ссылочные типы (например, строка).

7
ответ дан 3 December 2019 в 00:59
поделиться

Тем? указывает, что свойство на самом деле является нулевым типом.

public bool? Verbose { get; set; } 

равнозначен

public Nullable<bool> Verbose { get; set; }

Нулевой тип — это специальный тип, введенный в c# 2.0, который принимает тип значения в качестве универсального типа прараматера и позволяет присваивать ему значения null.

Тип nullable принимает только типы значений в качестве универсальных аргументов, поэтому при попытке использовать ? возникает ошибка компиляции в сочетании со строковым типом.

Дополнительные сведения: MSDN Nullable Types

3
ответ дан 3 December 2019 в 00:59
поделиться

Только типы значений могут быть объявлены как Nullable. Типы ссылок по умолчанию имеют значение null. Таким образом, вы не можете сделать строку null, так как string является ссылочный типом.

3
ответ дан 3 December 2019 в 00:59
поделиться

? означает, что ваш тип значения может иметь нулевое значение, особенно в случае обработки базы данных

, вам нужны эти значения NULL, чтобы проверить, является ли какое-то значение нулевым или нет.

Его можно применять только к типам значений, поскольку ссылочные типы могут быть нулевыми.

3
ответ дан 3 December 2019 в 00:59
поделиться

Символ ? является сокращением для приведенной ниже структуры:

struct Nullable<T>
{
    public bool HasValue;
    public T Value;
}

Вы можете использовать эту структуру напрямую, но ? является сокращенным синтаксисом, чтобы сделать результирующий код намного чище. Вместо того чтобы набирать:

Nullable<int> x = new Nullable<int>(125);

Вместо этого вы можете написать:

int? x = 125;

Это не работает со строкой, так как строка - это тип Reference, а не Value.

11
ответ дан 3 December 2019 в 00:59
поделиться

bool? - это сокращенное обозначение для Nullable. В целом, документация гласит:

Синтаксис T? является сокращением для Nullable, где T - тип значения. Эти две формы взаимозаменяемы

Поскольку string не является value type (это reference type), вы не можете использовать его в качестве общего параметра для Nullable.

5
ответ дан 3 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

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