나는 최근에 이미 같은 이름의 변수가있는 함수 내에 선언 된 작업의 매개 변수로 변수 이름을 실수로 재사용하는 일부 코드를 작성했습니다. 예를 들면 다음과 같습니다.
var x = 1;
Action<int> myAction = (x) => { Console.WriteLine(x); };
중복을 발견했을 때 코드가 컴파일되고 완벽하게 실행되었다는 사실에 놀랐습니다. 이것은 C #의 범위에 대해 알고있는 것을 기반으로 기대되는 동작이 아닙니다. 일부 빠른 인터넷 검색은 유사한 코드 로 인해 Lambda Scope Clarification 과 같은 오류 가 발생 한다고 불평하는 SO 질문을 제기했습니다 . (저는 샘플 코드를 IDE에 붙여 넣어 실행 여부를 확인하고 완벽하게 실행합니다.) 또한 Visual Studio에서 이름 바꾸기 대화 상자를 시작하면 첫 번째 이름이 이름 충돌로 강조 표시됩니다.x
이 코드는 왜 작동합니까? Visual Studio 2019에서 C # 8을 사용하고 있습니다.
x
해당 메소드 의 전체 매개 변수가 범위를 벗어납니다. 예를 들어 sharplab 을 참조하십시오 .