2011-03-08 6 views
0

반사 된 속성에 지정된 값을 할당 할 수 있는지를 결정하는 가장 쉬운 방법은 무엇입니까?반사 된 속성에 지정된 값을 할당 할 수 있는지 확인합니다.

내가 필요한 방법 서명은 다음과 같습니다

public static bool IsAssignable(PropertyInfo property, object value) 
{   
    throw new NotImplementedException(); 
} 

이 방법은 값 형식과 참조 형식과 weither 값이 null인지에 대해 작동합니다.

도움 주셔서 감사합니다.

Manitra.

답변

1

감사합니다, 여기에 코드 I입니다 사용할 내용 :

public static bool IsAssignable(PropertyInfo property, object value) 
{ 
    if (value == null && property.PropertyType.IsValueType && Nullable.GetUnderlyingType(property.PropertyType) == null) 
     return false; 
    if (value != null && !property.PropertyType.IsAssignableFrom(value.GetType())) 
     return false; 
    return true; 
} 

이 방법은 모든 경우와 순수하게 느슨한 형식으로 작동합니다.

Manitra.

3

당신은 아마 Type.IsAssignableFrom

+0

좋습니다. 감사합니다. 하지만 값이 null이고 GetType()을 호출 할 수 없다면? –

2

찾고있는 당신은 object로 전달됩니다 null의 유형을 확인할 수 없습니다. 재산이 null을 전혀 가질 수 없는지 말할 수 있습니다.

당신은 그 이유에 대해 컴파일시의 형태를 취할 수

: 스테판의 존 응답하고 "반사 속성이 null 할당 할 수 있는지 확인합니다"질문에

public static bool IsAssignable<T>(PropertyInfo property, T value) 
{   
    if (value != null) 
    { 
     return property.PropertyType.IsAssignableFrom(value.GetType()); 
    } 
    return property.PropertyType.IsAssignableFrom(typeof(T)); 
} 
+0

이 답변을 주셔서 감사합니다. 강하게 입력 된 유스 케이스 (upvoted)에서 정확합니다. 필자의 경우에는 값 비싼 객체를 가지고 있으므로 typeof (T)를 사용할 수 없습니다. 그러나 사실, null 값을 처리하는 비슷한 질문을 발견 했으므로 괜찮습니다. –

관련 문제