2009-10-03 1 views

답변

5

기본적으로, 그 표현은

new { name = name } 

에 해당합니다.

C# 컴파일러는 컴파일 할 때 name 속성을 사용하여 클래스를 생성합니다. 변수 이름의 속성 이름을 유추합니다 (분명히 알 수 있습니다). 모든 것은 컴파일 타임에 정적으로 입력됩니다. 런타임시 특수한 작업은 수행되지 않습니다 (익명 클래스 인스턴스 초기화 제외). 어떤 메소드도 호출되지 않습니다.

+0

확인. 그건 의미가 있습니다. 비록 그것이 컴파일 시간에 완료되었다는 것을 알았지 만, 나는 머리 속에서 더 복잡하게 만들었습니다. 내 진짜 질문은 변수의 이름을 얻는 가장 좋은 방법이었고 컴파일러가 가장 좋은 방법이라고 생각했다. –

+0

명백히 C#으로 직접 변환 할 수없는 것은 어느 것입니까? –

+1

'Object obj = new { "Foo"};'할 때 Mehrdad가 컴파일러에서 불만을 제기하는 것을 볼 수 있습니다. 어떤 이름을 사용했는지는 추측 할 수 없습니다. 'object obj = new {name = "Foo"};는 다시 잘 동작합니다. – Joren

5

"변수 이름을 얻으려면 어떻게해야합니까?" (위에서 언급 한 내용에서 언급했듯이) 처음에는 변수의 이름을 얻지 못하기 때문에 이것이 잘못된 질문입니다. 투영 초기 자변수 일 필요가 없습니다. 숫자가 인 경우이거나 표현식이이고 마침표 다음에 식별자가 인 마침표가 있어야합니다. 투영 초기 값에 사용되는 이름은 식별자입니다.

질문이 실제로 "어떻게 변수 이름을 얻나요?" 대답은 "변수가 고유 한 이름을 가질 필요가 없기 때문에"입니다. 변수는 0, 1 또는 여러 개의 이름을 가질 수 있으며 그 이름은 컴파일시에만 (또는 컴파일러가 내 보낸 디버거 사용 정보로) 알 수 있습니다. 이름은 런타임시 존재하지 않습니다.

관련 문제