Что делает ?
средний:
public bool? Verbose { get; set; }
При применении к string?
, существует ошибка:
Тип 'строка' должен быть не допускающим NULL-значения типом значения для использования его в качестве параметра 'T' в универсальном типе или методе 'Система. Nullable'
?
делает ваши типы (значения), не допускающие значения NULL, допускают значение NULL. Это не работает для строки
, поскольку это ссылочный тип и, следовательно, по умолчанию допускает значение NULL.
Из MSDN , о типах значений:
В отличие от ссылочных типов, тип значения не может содержать нулевое значение. Однако функция типов, допускающих значение NULL позволяет типам значений быть присвоено значение null.
?
в основном является сокращением для Nullable
.
Если вы хотите узнать больше, в MSDN есть отличная статья по этой теме.
bool?
- это сокращенная форма для System.Nullable
. Для параметра типа принимаются только типы значений, а не ссылочные типы (например, строка).
Тем? указывает, что свойство на самом деле является нулевым типом.
public bool? Verbose { get; set; }
равнозначен
public Nullable<bool> Verbose { get; set; }
Нулевой тип — это специальный тип, введенный в c# 2.0, который принимает тип значения в качестве универсального типа прараматера и позволяет присваивать ему значения null.
Тип nullable принимает только типы значений в качестве универсальных аргументов, поэтому при попытке использовать ? возникает ошибка компиляции в сочетании со строковым типом.
Дополнительные сведения: MSDN Nullable Types
Только типы значений могут быть объявлены как Nullable. Типы ссылок по умолчанию имеют значение null. Таким образом, вы не можете сделать строку null, так как string является ссылочный типом.
?
означает, что ваш тип значения может иметь нулевое значение, особенно в случае обработки базы данных
, вам нужны эти значения NULL, чтобы проверить, является ли какое-то значение нулевым или нет.
Его можно применять только к типам значений, поскольку ссылочные типы могут быть нулевыми.
Символ ?
является сокращением для приведенной ниже структуры:
struct Nullable<T>
{
public bool HasValue;
public T Value;
}
Вы можете использовать эту структуру напрямую, но ?
является сокращенным синтаксисом, чтобы сделать результирующий код намного чище. Вместо того чтобы набирать:
Nullable<int> x = new Nullable<int>(125);
Вместо этого вы можете написать:
int? x = 125;
Это не работает со строкой, так как строка - это тип Reference, а не Value.
bool?
- это сокращенное обозначение для Nullable
. В целом, документация гласит:
Синтаксис T? является сокращением для Nullable, где T - тип значения. Эти две формы взаимозаменяемы
Поскольку string
не является value type (это reference type), вы не можете использовать его в качестве общего параметра для Nullable
.