在C#中使用带有泛型的`is`运算符

Dan*_*ite 21 c# generics types operators

我想做这样的事情

class SomeClass<T>
{
   SomeClass()
   {
        bool IsInterface = T is ISomeInterface;
   }
}
Run Code Online (Sandbox Code Playgroud)

这样的事情最好的方法是什么?

注意:我不打算T用a 约束where,但我希望我的代码能够了解接口的T实现类型.我宁愿我不必构建一个T.

Fre*_*örk 29

我不认为你可以使用这个is操作符.但是你可以使用IsAssignableFrom:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
Run Code Online (Sandbox Code Playgroud)


Asa*_*sad 8

应该使用以下代替

 bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
Run Code Online (Sandbox Code Playgroud)

是运营商

isoperator用于检查run-time type对象是否compatible具有给定的type.

is如果满足以下两个条件,则使用符合语法的表达式,求值为true:

  • 表达式不为空.
  • 表达式可以转换为类型.也就是说,形式(类型)(表达式)的强制转换表达式将在不抛出异常的情况下完成.有关更多信息,请参见7.6.6转换表达式.

参考