2016-12-08 1 views
0

가 어떻게이처럼 작동하는 확장 메서드 "SetPropValue"를 쓸 수에 : 또한어떻게 .NET에서 문자열 이름 매개 변수를 통해 설정 속성 액세스를

myObject.SetPropValue("Address") = "blahblah" 

// which does: 
myObject.Address = "blahblah" 

그리고 "GetPropValue"

Object address = myObject.GetPropValue("Address") 
+0

좋은 점 @LarsTech. 객체로 변경했습니다. – unnknown

+0

유용하다고 생각되는 시나리오가 있습니다. 예를 들어 액세스 할 속성을 런타임에만 알 수있는 동적 시나리오를 생각해보십시오. – unnknown

답변

2

C#을 할당 연산자가 오버로딩을 허용하지 않기 때문에 첫 번째 구문을 달성 할 수있는 기능을 제공하지 않습니다. 당신은하지만, 세터에 대한 전통적인 구문을 사용할 수 있습니다 :

public static void SetPropVal<T>(this object obj, string name, T val) { 
    if (obj == null) return; 
    obj.GetType().GetProperty(name)?.SetValue(obj, val); 
} 

public static T GetPropVal<T>(this object obj, string name) { 
    if (obj == null) return default(T); 
    var res = obj.GetType().GetProperty(name)?.GetValue(obj); 
    return res != null ? (T)res : default(T); 
} 

참고이 방법은 의미가 있음을 문자열 에서 알 수없는 경우에만 :

여기
myObject.SetPropValue("Address", "blahblah"); 

는 당신이 그것을 할 수있는 방법입니다 컴파일 시간, 즉 사용자 또는 구성에서옵니다. 문자열이 컴파일 타임에 알려지면 dynamic으로 캐스팅하면 더 읽기 쉬운 구문으로 동일한 결과를 얻을 수 있습니다.

+0

감사합니다. 구성에서 문자열이 나오는 위치를 설명하는 시나리오는 내가 직면 한 것입니다. – unnknown

관련 문제