C# 如何将IS运算符与左侧的类型一起使用?

C# 如何将IS运算符与左侧的类型一起使用?,c#,reflection,static,properties,types,C#,Reflection,Static,Properties,Types,我正在编写一个方法,它使用反射列出类的静态属性,但我只对特定类型的属性感兴趣(在我的例子中,该属性必须是从DataTable派生的类型)。我想要的是下面的if()语句(目前总是返回true): 谢谢,我被难住了 if( !( propertyInfo.PropertyType.isSubClassOf( typeof(DataTable) ) ) continue; 我认为应该这样做。您需要使用而不是“is”操作符 这将是: if( !( DataTable.IsAssignableFrom

我正在编写一个方法,它使用反射列出类的静态属性,但我只对特定类型的属性感兴趣(在我的例子中,该属性必须是从DataTable派生的类型)。我想要的是下面的if()语句(目前总是返回true):

谢谢,我被难住了

if( !( propertyInfo.PropertyType.isSubClassOf( typeof(DataTable) ) )
 continue;
我认为应该这样做。

您需要使用而不是“is”操作符

这将是:

if( !( DataTable.IsAssignableFrom(propertyInfo.PropertyType) )
如果PropertyType是DataTable或DataTable的子类,则
DataTable.IsAssignableFrom(propertyInfo.PropertyType)
将为true

if (!(typeof(DataTable).IsAssignableFrom(propertyInfo.PropertyType)))

这里的排序可能有点倒退,但对于,您希望先处理需要使用的类型,然后再检查要检查的类型。

但是,如果PropertyType是DataTable,这将失败。不过,我不知道这有什么意义。
if (!(typeof(DataTable).IsAssignableFrom(propertyInfo.PropertyType)))