[英]Why can't I cast generic type to inheriting type?
我有一些定义如下的方法;
public void SomeMethod<T>() where T : BaseClass, new()
{
InheritedClass instance = (InheritedClass)instanceOfT; //won't compile
}
为什么不允许该演员? 您如何解决这个问题? 我有大约200行代码,这些代码都适合于泛型,除了我需要对每个继承类(一个3)进行一个LINQ查询。 我正在尝试进行typeof
检查,然后进行typeof
,然后执行适当的查询,但是编译器不允许我进行强制类型转换...鉴于我只是检查以确保T
实际上是类型的实例InheritedClass
没有办法失败,为什么编译器不让我这样做呢?
您需要将变量强制转换为object
,然后再向下执行此操作。 因为正是编译器认为,强制转换没有成功的可能方法,但是它从来没有将检查应用于object
类型的变量。
InheritedClass instance = (InheritedClass)(object)instanceOfT;
因为实际的instanceOfT的类型(我们称它为InheritedClassB
)可能与InheritedClass
不相关。
给定我只是检查以确保T实际上是InheritedClass类型的实例
实际上,您只是在检查T是否扩展了BaseClass。
编辑:这看起来像是代码的味道。您不能让具体的类处理此方法吗? 因此,每个具体类都有其自己的实现,并且知道如何执行SomeMethod
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.