Почему этот код бритвы компилируется, хотя я повторно использую одно и то же имя переменной цикла в вложенной ForeachC#

Место общения программистов C#
Anonymous
Почему этот код бритвы компилируется, хотя я повторно использую одно и то же имя переменной цикла в вложенной Foreach

Сообщение Anonymous »

Я пишу блазор компонент и заметил что -то неожиданное. В моем коде бритвы я использую FOREACH, чтобы зацикливаться на списке, а внутри обработчика событий Click of Radzenbutton я объявляю еще одну Foreach с тем же именем переменной цикла. Я думал, что это приведет к ошибке компилятора из -за дубликатной переменной в области объема, но код компилирует и работает нормально. < /P>

Код: Выделить всё

@foreach(var someItem in SomeStringList)
{
@someItem


}

@code {
public List SomeStringList = new() { "Item 1", "Item 2", "Item 3" };
public List SomeOtherStringList = new() { "Item A", "Item B", "Item C" };
}

Это компилируется и работает нормально.
Но я бы ожидал ошибку компилятора, потому что я переоборудовал переменную electiTem внутри вложенной фореаче , в то время как внешний некоторое количество все еще в области (и даже используется в лямбде для клика handler). />
Почему эта компиляция без конфликта? Seleyitem как во внешних, так и во внутренних петлях Foreach. Я ожидал, что компилятор будет жаловаться на конфликт имени, поскольку внешняя переменная все еще упоминается в выражении Lambda. Тем не менее, код, скомпилированный без какой -либо ошибки, и обе петли работают. Я хочу понять, почему C# допускает это и является ли это безопасно или просто затеняет переменную.

Подробнее здесь: https://stackoverflow.com/questions/797 ... iable-name

Вернуться в «C#»