Я конечно мог упустить некоторые обновления языка из виду, но что за поле, или это вовсе даже не поле.
К примеру:
IPAddress.TryParse("someIP", out _); // ??
Куда денется результат выходного параметра _
, т.к. если попробовать его использовать, то его просто нет.
Начиная с C# 7.0, имя _
(подчёркивание), передаваемое в out var
, стало обозначать пустую переменную (discard operator). Она предназначена для сообщения компилятору о том, что мы не нуждаемся в возвращаемом значении, благодаря чему он может провести ряд оптимизаций (например, удалить весь код, вычисляющий это значение, — прим. пер.).
Пример:
void Test(out int i) => i = 1;
Test(out _); // Хоть переменная "_" нигде не объявлена, в C# 7.0 эта строка
// не вызовет ошибки компиляции
var r = _; // error CS0103: The name '_' does not exist in the current context
Также он может быть полезен при деконструкции (ещё одно нововведение C# 7.0) в случае, если нам не нужны все значения кортежа.
Пример:
var Person = ("John", "Smith");
var (First, _) = Person; // Переменная "_" снова не объявлена
Debug.Print(First); // Выводит "John"
Debug.Print(_); // error CS0103: The name '_' does not exist in the current context
Однако при наличии переменной _
поведение компилятора на out var _
не определено.
P. S.: Как @maf-soft указал в комментариях, здесь нет никакой проблемы. При наличии в области видимости явно объявленной _
компилятор трактует код как в старых версиях.
Данный ответ является вольным переводом ответа участника MotKohn на вопрос «C# Variable Name “_” (underscore) only».
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть следующий код запуска приложения Application2 из текущего Application1: