我对比较泛型类型的 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,我邀请你阅读。

10-08 16:47