Что такое _ в методах TryParse, TryGetValue

205
01 декабря 2018, 09:30

Я конечно мог упустить некоторые обновления языка из виду, но что за поле, или это вовсе даже не поле.

К примеру:

IPAddress.TryParse("someIP", out _); // ??

Куда денется результат выходного параметра _, т.к. если попробовать его использовать, то его просто нет.

Answer 1
  • Начиная с 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».

READ ALSO
Где живет EditBin.exe?

Где живет EditBin.exe?

Пытаюсь выполнить в Post -Build event такую команду:

211
Запуск EXE из приложения

Запуск EXE из приложения

Есть следующий код запуска приложения Application2 из текущего Application1:

171
C# Локализация поиск строки

C# Локализация поиск строки

У меня есть несколько файлов

159