我对比较泛型类型的 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 中受支持。您可以使用 out
关键字标记通用 T
参数:
public interface ISomeInterface<out T> where T : SomeBaseClass
但这有一个限制。 T
参数只能作为接口(interface)中方法的返回类型出现。
Eric Lippert 有一个 series of blog posts关于这个主题,我邀请您阅读。
关于C#:是具有继承的泛型类型的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11186493/