为什么我的C#IS语句不起作用?

时间:2013-09-24 17:56:56

标签: c# reflection properties

我有以下代码,其中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

我在这里做错了什么?

2 个答案:

答案 0 :(得分:24)

is使用两个对象之间的类型比较。因此,DeclaringType的类型为Type,而typeof(T)的类型为T,但不相等。

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

答案 1 :(得分:4)

您正在寻找的是

TypeIsAssignableFrom

if (propertyInfo.DeclaringType.IsAssignableFrom(typeof(T)))