2014-07-09 1 views
0

를 사용하여 : I로내부적으로 일부 반사 할 수 있도록 나는 아마도, 내 개인 회원의 이름을 통과해야하는 라이브러리를 사용하고 개인 멤버 이름에 대한 직접 참조를 얻기 대신 문자열

m_MaterialsProp = serializedObject.FindProperty("m_Materials"); 

을 리팩터링 및 리 트랙터를 사용하면 이러한 문자열이 올바로 유지되도록 악몽이됩니다.

private 멤버에 대한 안전한 참조를 얻고 대신 함수에 멤버 이름을 전달할 수 있습니까?

+0

의미 -이 속성이 실제로 존재하는지 정적 (컴파일 타임) 확인을 원하십니까? 나는 그것이 가능하지 않다고 믿는다 ... –

답변

0
public string GetMemberName<T>(Expression<Func<T>> memberExpression) 
    { 
     MemberExpression expressionBody = (MemberExpression)memberExpression.Body; 
     return expressionBody.Member.Name; 
    } 
+0

사용법을 시연 해 주시겠습니까? – Vesuvian

+0

작동하지 않습니다. 개인 필드 액세스를 식으로 사용할 수 없습니다. –

+0

나는이 사용하여 종료했습니다 공공 문자열 materialsMemberName {얻을 {반환 GetMemberName (() => m_Materials);}} 공공 정적 문자열 GetMemberName (표현 > memberExpression) { 수익률 (memberExpression.Body를 MemberExpression으로) .Member.Name; } – Vesuvian

0

코드를 표시하지 않고 직접 찾아야하는 접근 방식은이 라이브러리와 함께 사용되는 Fields에 사용자 정의 Annotation을 사용하는 것입니다.

다음 Reflection을 사용하여 Annotation을 가진 반에 모두 Fields을 찾을 수 있습니다. 이렇게하면 실제 필드의 이름을 변경하면 주석이 그대로 유지되고 필드를 찾을 수 있습니다.

클래스를 인수로 사용하는 유틸리티 메소드는 해당 클래스에 필요한 모든 Fields를 제공 할 수 있습니다.

관련 문제