2009-11-03 6 views
7

가능한 중복 :
c# - How do you get a variable’s name as it was physically typed in its declaration?C# 속성 이름을 리플렉션 문자열로 가져 오는 방법은 무엇입니까?

나는 나는 "강력한 형식의"마법의 문자열을 가질 수 있도록 문자열로 속성 이름을 얻을 수있는 방법을 찾고 있어요. 내가해야할 일은 MyClass.SomeProperty.GetName()과 같이 "SomeProperty"를 반환하는 것입니다. 이게 C#에서 가능합니까?

답변

6

표현식을 사용하면 매우 쉽게 표현할 수 있습니다. 이 blog for a sample을 참조하십시오.

이렇게하면 람다를 통해 표현식을 만들고 이름을 가져올 수 있습니다.

string propertyName = Reflect.GetProperty(() => SomeProperty).Name; 

비올라 : 참조 "반영"클래스를 사용하여 해당 매핑하기 위해

public int MyProperty { 
    get { return myProperty; } 
    set 
    { 
     myProperty = value; 
     RaisePropertyChanged(() => MyProperty); 
    } 
} 

, 당신이 뭔가를 할 거라고 예를 들어, 구현에서 INotifyPropertyChanged이 같은 뭔가를 재 작업 할 수 있습니다 - 매직 문자열이없는 속성 이름.

+0

여기의 문법은 다소 불쾌하지만 필자가 필요로하는 것은합니다. 감사! –

1

리플렉션을 사용하여 개체의 속성 목록을 가져올 수 있습니다.

MyClass o; 

PropertyInfo[] properties = o.GetType().GetProperties(
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance 
); 

각 속성은 당신에게 "SomeProperty"를 얻을 것 Name (이름) 속성이

8

이 방법은 당신이 그것을 호출 할 수 있습니다 지금 Expression

public static string GetName<T>(this T item) where T : class 
{ 
    if (item == null) 
     return string.Empty; 

    return typeof(T).GetProperties()[0].Name; 
} 

를 사용하는 것보다 빠른 방법이 될 것입니다 :

new { MyClass.SomeProperty }.GetName(); 

더 많은 성능이 필요할 경우 값을 캐시 할 수 있습니다. 이 중복 된 질문보기 How do you get a variable's name as it was physically typed in its declaration?

+0

최상의 답을 얻으세요. 속성을 반복하고 싶지 않습니다. 실제 속성을 기반으로 속성 이름을 가져 오려고합니다. 이름에서 원하는 첫 번째 (유일한) 속성이있는 익명 유형을 사용하면 이름이 천재입니다. – Paul

+0

@ Paul 나는 그것의 천재가 아니다. 둘째로, 그것은 매우 리팩터링 적이 지 않습니다. 제 말은 속성의 이름을 변경하면 익명 형식이 원래 이름을 유지한다는 의미입니다. 이 경우,'SomeProperty'를'SomeProperty1'로 변경하면, 익명의 클래스는'SomeProperty = SomeProperty1}'로 바뀌며, 업데이트 된 이름 "SomeProperty1"대신 "SomeProperty"를 출력합니다. 나는 대답에서 그것을 언급 할 것이다. – nawfal

+0

Darn. 속성 이름을 변경하는 것은 예상하지 않지만, 내가 한 적이 있다면 리팩터링에서 처리하도록 할 것입니다. 알려 줘서 고마워. – Paul

관련 문제