Что ?
значит:Переменный тип, заканчивающийся на?
public bool? Verbose { get; set; }
При нанесении на string?
, есть ошибка:
The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'
Просто добавьте другие ответы, описывающие типы с нулевым значением. Bool хранится в памяти как 0 или 1, другой опции нет. При создании этого типа с нулевым значением выделяет большую область памяти, где ее значение может быть истинным, ложным или нулевым. Вы заметите, что теперь вы можете делать такие вещи, как Verbose.HasValue, которые вы не могли бы сделать, если бы это было определено как bool. –
Также, чтобы добавить общий диалог, все ссылочные типы по умолчанию имеют значение NULL (I.E. вы можете установить их все в null), поэтому тип Nullable предназначен для их не принимать, поскольку он дублирует функциональность и усложняет вопросы. –
Rangoric
Возможный дубликат [Что такое «DateTime?» в C#?] (http://stackoverflow.com/questions/109859/what-does-datetime-mean-in-c) –