2013-09-24 3 views
9

나는이 T 같은 정의 제네릭 다음 코드 :C# IS 문이 작동하지 않는 이유는 무엇입니까?

public abstract class RepositoryBase<T> where T : class, IDataModel 

이 코드는 잘 작동합니다 :

PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName); 
if (propertyInfo.DeclaringType.FullName == typeof(T).FullName) <--- Works just fine 

을 거짓

PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName); 
if (propertyInfo.DeclaringType is T) <-- does not work 
로 평가 코드 대

여기서 내가 뭘 잘못하고 있니?

+0

http://www.youtube.com/watch?v=j4XT-l-_3y0입니다 – JoelFan

답변

24

is은 두 개체 간의 형식 비교를 사용합니다. 그래서 DeclaringTypeType이고 typeof(T)T입니다.이 숫자는 같지 않습니다.

var aType = typeof(propertyInfo.DeclaringType); 
var bType = typeof(T); 
bool areEqual = aType is bType; // Always false, unless T is Type 
4

당신이 찾고있는 무슨

TypeIsAssignableFrom

if (propertyInfo.DeclaringType.IsAssignableFrom(typeof(T))) 
관련 문제