Это часто задаваемый вопрос;см. также:
Область действия лямбда-переменной
C # схожу с ума, когда я объявляю переменные с тем же именем, что и в лямбде
Область видимости переменной C #: «x» не может быть объявлен в этой области видимости, поскольку это придает другое значение значению «x»
Путаница с областью действия переменной в C #
Ответ таков: внимательно прочитайте сообщение об ошибке.В сообщении об ошибке указывается, в чем именно заключается проблема: вам не разрешено использовать одно и то же простое имя для обозначения двух разных вещей в одном и том же блоке.
Например:
class C
{
int x;
void M()
{
int x;
}
}
Совершенно законно. Обратите внимание, что область действия внешнего x перекрывает область действия внутреннего x. не незаконно иметь перекрывающиеся области с одним и тем же именем в обеих областях.
Это недопустимо:
class C
{
int x;
void M()
{
Console.WriteLine(x); // this.x
{
int x;
}
}
}
Опять же, обе области сперекрытие х совершенно законно.Недопустимо то, что в простом имени x используются две средние две разные переменные в одном и том же блоке - то есть во внешнем блоке M (), который содержит внутренний блокM.
Программы, в которых одно и то же простое имя используется для обозначения двух разных вещей в одном блоке, сбивают с толку и подвержены ошибкам ипоэтому незаконно в C #.
Для более подробной информации читайте мои статьи на эту тему:
http://blogs.msdn.com/b/ericlippert/archive/tags/simple+names/