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))