Linqpad при использовании discard (_ = underscore) выдает ошибку CS0246 - не удалось найти тип или имя пространства имен '_' - PullRequest
1 голос
/ 29 февраля 2020

Я хочу узнать об именованных кортежах и сбросе.

На основе C# 7.0: Объяснение кортежей (msdn-magazine 2017-08) Я создал эту программу

void Main()
{

(string firstname, _, int age) user = ("surfmuggle", "discard this", 15);
user.Dump();
}

, но выдает

CS0246 Не удалось найти имя типа или пространства имен '_' (нажмите F4, чтобы добавить директиву использования или ссылку на сборку)

Вопрос

Спасибо

Экран программы

Linqpad 6 program

1 Ответ

3 голосов
/ 29 февраля 2020

Это не связано с LINQPad - вы получите ту же ошибку в Visual Studio.

Проблема в том, что вы пытаетесь использовать отбрасывания C# в контексте, в котором они неподдерживаемый. Из документации:

В C# 7.0 отбрасывания поддерживаются в назначениях в следующих контекстах:

  • Деконструкция кортежей и объектов.
  • Сопоставление с шаблоном с переключателем is и.
  • Вызов методов без параметров.
  • Автономный _, когда в области нет _.

Ваш пример будет работать в контексте деконструкции:

(string firstname, _, int age) = ("surfmuggle", "discard this", 15);
firstname.Dump();
age.Dump();
...