2013-09-24 10 views
9

私はTのような定義された一般的である次のコードを、持っている:C#IS文が機能しないのはなぜですか?

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

このコードは正常に動作します:偽

PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName); 
if (propertyInfo.DeclaringType is T) <-- does not work 
に評価され、このコード対

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

私はここで何が間違っていますか?

+0

http://www.youtube.com/watch?v=j4XT-l-_3y0です – JoelFan

答えて

24

isは、2つのオブジェクト間の型比較を使用します。したがって​​はタイプTypeであり、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))) 
関連する問題