我对比较泛型类型的 is 运算符有问题。
public interface ISomeInterface<T> where T : SomeBaseClass{
}
public class SomeClass : SomeBaseClass{
}
现在我们要使用is运算符检查类型。我们有一个实现接口(interface)ISomeInterface的类的实例。
不幸的是,我们面临以下问题:
// someObject is an Instance of a class implementing interface ISomeInterface<SomeClass>
bool isSomeBaseClass = someObject is ISomeInterface<SomeBaseClass>; // false
bool isSomeClass = someObject is ISomeInterface<SomeClass>; // true
是否可以检查变量泛型类型?
提前致谢,
托比
最佳答案
这称为泛型协方差,在 C# 4.0 中受支持。您可以使用 T
关键字标记通用 out
参数:
public interface ISomeInterface<out T> where T : SomeBaseClass
但这有一个限制。
T
参数只能作为接口(interface)中方法的返回类型出现。Eric Lippert 有一个关于这个主题的 series of blog posts,我邀请你阅读。