Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中对泛型使用'is'运算符#_C#_Generics_Types_Operators - Fatal编程技术网

C# 在C中对泛型使用'is'运算符#

C# 在C中对泛型使用'is'运算符#,c#,generics,types,operators,C#,Generics,Types,Operators,我想这样做: class SomeClass<T> { SomeClass() { bool IsInterface = T is ISomeInterface; } } class-SomeClass { SomeClass() { bool IsInterface=T为接口; } } 做这样的事情最好的方法是什么 注意:我不想用where约束T,但我希望我的代码知道T实现了什么类型的接口。我希望我不必构造t我不认为您可以使用is操作符来实现这

我想这样做:

class SomeClass<T>
{
   SomeClass()
   {
        bool IsInterface = T is ISomeInterface;
   }
}
class-SomeClass
{
SomeClass()
{
bool IsInterface=T为接口;
}
}
做这样的事情最好的方法是什么


注意:我不想用
where
约束
T
,但我希望我的代码知道
T
实现了什么类型的接口。我希望我不必构造
t

我不认为您可以使用
is
操作符来实现这一点。但您可以使用IsAssignableFrom:

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

我相信你能做到最好:

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

应改为使用以下内容

 bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
是操作员

is
运算符用于检查对象的运行时类型是否为

与给定的
类型
兼容

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

  • 表达式不为空
  • 表达式可以强制转换为类型。那个 是的,是形式的强制表达式 (类型)(表达式)将完成 没有抛出异常。对于 有关详细信息,请参阅

参考资料


您可以尝试执行以下操作

Type Ttype = typeof(T);
这将为您提供Type类的全部功能,该类具有类似“FindInterface”的功能。

您可以使用:

class-SomeClass
{
SomeClass()
{
bool-IsIComparable=typeof(IComparable)。IsAssignableFrom(typeof(T));
}
} 

如果要检查泛型方法/类中的类型,我想可能有问题。我不想让SomeClass有3个单独的后代。我希望根据
T
是否有某些内容,为某些内容创建一些类。
  class SomeClass<T>
  {
     SomeClass()
     {
        bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
     }
  } 
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))