9

次のコードがあります。ここで、T はそのように定義されたジェネリックです。

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

vs false と評価されるこのコード

PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName);
if (propertyInfo.DeclaringType is T) <-- does not work

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

4

2 に答える 2

24

2 つのオブジェクト間の型比較を使用しますSoDeclaringTypeは typeTypeであり、typeof(T)is は typeTであり、等しくありません。

var aType = typeof(propertyInfo.DeclaringType);
var bType = typeof(T);
bool areEqual = aType is bType; // Always false, unless T is Type
于 2013-09-24T17:58:39.530 に答える
4

あなたが探しているのは

TypeIsAssignableFrom

if (propertyInfo.DeclaringType.IsAssignableFrom(typeof(T)))
于 2013-09-24T18:25:03.200 に答える