我有以下代码,其中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
我在这里做错了什么?
答案 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)