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

时间:2010-02-19 20:09:18

标签: c# generics types operators

我想做这样的事情

class SomeClass<T>
{
   SomeClass()
   {
        bool IsInterface = T is ISomeInterface;
   }
}

这样的最佳方式是什么?

注意:我不打算用T限制where,但我希望我的代码能够了解T实现的接口类型。我希望我不必构建T

6 个答案:

答案 0 :(得分:27)

我认为您不能使用is运算符。但是你可以使用IsAssignableFrom:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

答案 1 :(得分:7)

应使用以下内容

 bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

是运营商

is运算符用于检查对象的run-time type compatibletype

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

  • 表达式不为空。
  • 表达式可以转换为类型。那 是,表格的演员表达 (类型)(表达式)将完成 没有抛出异常。对于 更多信息,请参阅7.6.6 Cast expressions.

<强>参考

答案 2 :(得分:2)

您可以使用IsAssignableFrom

  class SomeClass<T>
  {
     SomeClass()
     {
        bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
     }
  } 

答案 3 :(得分:2)

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))

答案 4 :(得分:1)

我相信你能做到最好:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

答案 5 :(得分:0)

您可以尝试做类似

的事情
Type Ttype = typeof(T);

这将为您提供Type类的全部功能,它具有“FindInterfaces”等功能。