В настоящее время с C # 7.0 значение _
иногда имеет значение.Он стал оператором сброса для новой функции out var
.Он используется, когда функция возвращает значение, и вы хотите уведомить компилятор о том, что вы не будете его использовать, поэтому его можно оптимизировать.Или при деконструкции (другая функция C # 7.0) вы можете использовать ее для игнорирования части кортежа, которая вам не интересна.
Пример out var
void Test(out int i) => i = 1;
Test(out _); // _ was never declared, it will still compile in C# 7.0
var r = _; // error CS0103: The name '_' does not exist in the current context
Пример деконструкция кортежа
var Person = ("John", "Smith");
var (First, _) = Person; // '_' is not a declared
Debug.Print(First); // prints "John"
Debug.Print(_); // error CS0103: The name '_' does not exist in the current context
Проблема возникает, если вы объявляете свою собственную переменную с именем _
, а затем используете оператор discard , что приведет к неоднозначности.Об этой проблеме сообщалось Здесь .
РЕДАКТИРОВАТЬ Данная проблема не является проблемой, о чем @ maf-soft отмечает в комментариях.Если было объявлено _
, оно обрабатывается как обычная переменная, как это было до C # 7.0.