繁体   English   中英

为什么不能将通用类型转换为继承类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM