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 这段代码评估为假

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

我在这里做错了什么?

4

2 回答 2

24

is使用两个对象之间的类型比较。so DeclaringTypeis of typeTypetypeof(T)is of type T,它们不相等。

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 回答