我有一些方法具有以下定义;
public void SomeMethod<T>() where T : BaseClass, new()
{
InheritedClass instance = (InheritedClass)instanceOfT; //won't compile
}
为什么不允许演员表?你怎么能绕过这个?我有大约200行代码,它们都适用于泛型,除了我需要为每个继承类提供一个LINQ查询(有3个)。我试图进行typeof
检查,然后使用强制转换,然后执行相应的查询,但编译器不会让我进行转换......鉴于我刚检查以确保{{1}实际上是T
类型的实例,它不会失败,为什么编译器不允许我这样做呢?
答案 0 :(得分:2)
您需要将变量强制转换为object
,然后返回以执行此操作。因为编译器认为演员阵容没有可能成功的方式,但它不会将该校验应用于object
类型的变量。
InheritedClass instance = (InheritedClass)(object)instanceOfT;
答案 1 :(得分:1)
因为实际的instanceOfT类型(我们称之为InheritedClassB
)可能与InheritedClass
无关。
鉴于我刚检查以确保T实际上是InheritedClass类型的实例
实际上,你只是检查T是否扩展了BaseClass。
编辑:这看起来像代码味道..难道你不能让具体类处理这个方法吗?因此,每个具体类都有自己的实现,并知道如何执行SomeMethod
。