Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Синтаксис C#, знак вопроса

Дмитрий Найтов Знаток (310), открыт 9 часов назад
string? name = Console.ReadLine();
зачем нужен знак вопроса после типа?
без него компилятор подчеркивает метод зеленым курсивом. (да, у меня VS)
4 ответа
SlomiX Мудрец (12155) 9 часов назад
Добавьте ? к типу, если переменная может быть null:
 string? name = Console.ReadLine();  
Теперь компилятор знает, что name может содержать null, и проверяет ваш код на безопасное обращение с этим значением.

Используйте проверку на null:
 if (name != null) 
{
Console.WriteLine(name.Length); // Безопасно
}
Отключите nullable context (не рекомендуется):
Добавьте в .csproj-файл:
 <Nullable>disable</Nullable> 
Но лучше работать с nullable-проверками — это предотвращает ошибки.

Примеры
 // Безопасный код с nullable-типом 
string? input = Console.ReadLine();
if (input is not null)
{
Console.WriteLine(input.ToUpper());
}

// Опасный код (возможен NullReferenceException)
string input = Console.ReadLine()!; // "!" подавляет предупреждение (не рекомендуется)
Console.WriteLine(input.Length);
akelum Мудрец (11682) 9 часов назад
Обозначает, что переменная может принимать значение null. Нет знака вопроса - не может быть null.
Андрей Высший разум (472484) 9 часов назад
Конструкция:
 string? name; 
это краткая (и более удобная) запись конструкции:
 System.Nullable<string> name; 
И означает она то, что переменная name имеет nullable-тип: т.е. name может содержать либо строку, либо константу null, означающую: "значение отсутствует".
Николай Веселуха Высший разум (374407) 9 часов назад
Если это раздражает, то вот вам костыль:
 var line = Console.ReadLine() ?? ""; 
Похожие вопросы