2010-04-14 2 views
3

제목은 거의 다 말합니다. 컴파일러가 생성되면 get {get; 설정;} 속성?FieldInfo가 컴파일러 생성 백킹 필드인지 확인합니다.

나는 나의 FieldInfos를 얻기 위해이 코드를 실행 해요 :

Class MyType 
{ 
    private int foo; 
    public int bar {get; private set; } 
} 

Type type = TypeOf(MyType); 
foreach (FieldInfo fi in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.NonPublic)) 
{ 
    // Gets both foo and bar, however bar is called <bar>k__backingfield. 
} 

그래서 질문은, 어떻게 든 그 이름을 확인에 의존하지 않고의 fieldInfo가 backingfield 것을 감지 할 수 있습니까? (꽤 문서화되어 있지 않고 프레임 워크의 다음 버전에서 깨질 수 있습니다.)

+0

왜 호기심에서 알아야합니까? (대답에 영향을 미칠 수도 있습니다) –

+0

특정 유형의 모든 FieldInfo 및 PropertyInfo를 가져 와서 사전에 저장하기 때문입니다. 나는 – Steffen

답변

7

.IsDefined(typeof(CompilerGeneratedAttribute), false);을 확인하십시오.

+0

그래이 – Steffen

+0

:-) 더 나은 선택처럼 보인다 :-) 특정 해당 GetCustomAttributes이 트릭을 할 것입니다 어쨌든 내가 꽤 있어요 (난 당신이 한 번 나에게 몇 가지 동적 코드를 전송 믿는)을 반영 기반 ORM을 위해 사용 그리고 그것은 매력처럼 작동합니다 - 내 테스트 스위트가 마침내 통과했습니다 :-) – Steffen

관련 문제