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

Posted

技术标签:

【中文标题】为啥我的 C# IS 语句不起作用?【英文标题】:Why is my C# IS statement not working?为什么我的 C# IS 语句不起作用? 【发布时间】:2013-09-30 02:05:47 【问题描述】:

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

我在这里做错了什么?

【问题讨论】:

youtube.com/watch?v=j4XT-l-_3y0 【参考方案1】:

is 使用两个对象之间的类型比较。所以DeclaringTypeType 类型,typeof(T)T 类型,它们不相等。

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

【讨论】:

【参考方案2】:

你要找的是

TypeIsAssignableFrom

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

【讨论】:

以上是关于为啥我的 C# IS 语句不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Jquery Ajax 调用不起作用?(Asp.net MVC C#)

如何使用 C# 创建一个对象以统一在两个位置之间移动,为啥我的代码不起作用?

为啥 Game Maker Studio 告诉我我的 if 语句不起作用?

为啥这个合并语句不起作用?

为啥这个 IF NOT EXISTS 语句不起作用?

访问更新语句在 C# 中不起作用