Почему компилятор C# допускает дублирование переменной во вложенной области видимости? - PullRequest
18 голосов
/ 10 января 2020

Исторически при разработке в. Net I не удалось продублировать имя переменной во вложенной области видимости. Однако после недавнего обновления Visual Studio 2019 до версии 16.4.2 я заметил, что имена переменных могут дублироваться во вложенной области.

Например:

var test = "hello";
Console.WriteLine(test);
var things = new []{"one", "two", "three"};
things.Select(test => // <- test is duplicated here, normally this breaks compilation
{
    Console.WriteLine(test);
    return test;
}).ToList();

// output:
// hello
// one
// two
// three

https://dotnetfiddle.net/h85BK4

Почему это внезапно разрешено?

Последующий вопрос: Если это новая языковая "функция", есть ли способ настроить Visual Studio, чтобы продолжить разрыв, когда переменная дублируется во вложенной области?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Это новая функция в C# 8.0, локальные функции и лямбда-параметры могут скрывать внешние имена.

0 голосов
/ 15 февраля 2020

я предполагаю, что функция выбора компилируется как stati c, так как она не имеет соединений с телом метода хоста. он просто печатает и возвращает нужный предмет. это не требует какого-либо доступа к методу и, как таковое, его можно из соображений оптимизации удалить из тела метода и поместить самостоятельно в глобальную область действия.

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

Что касается предотвращения этого, вы не можете сказать vs выдать ошибку, когда она произойдет, вам просто нужно будет вручную изменить имя переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...