我有两个可以接受通用类型参数的通用函数,并且我有三个主要类和很多子类
类:Base
,Normal
,Special
无论Special
和Normal
继承base
,special
是一个final类,但是normal
有很多子类
我的功能如下
public void doWork<T>() where T:Base
{
list<T> =
typeof(T) == typeof(Special) ?
(List<T>)Convert.ChangeType(GetObjectsSelectedFromSpecial(),typeof(List<T>)) : // this is very ugly
(List<T>)GetObjectsSelectedFromNormal<T>(); // this will not compile
}
GetObjectsSelectedFromSpecial
返回的列表Special
,这很好
GetObjectsSelectedFromNormal<T>
看起来像这样,并且可以通过 Normal
public List<T> GetObjectsSelectedFromNormal<T>() where T : Normal
{
...
ExternalFunction<T>(); // this needs T to be of type `Normal`
...
}
但在排队
... : (List<T>)GetObjectsSelectedFromNormal<T>();
我得到错误
在通用类型或方法“ myProject.GetObjectsSelectedFromNormal()”中,类型“ T”不能用作类型参数“ T”。没有从“ T”到“ Normal”的隐式引用转换。
有没有一种方法可以转换泛型类型参数?不是类型的对象,T
而是T
自身的类型转换/转换/强制类型?我看过的每个地方都只是在谈论向和从的转换变量T
编辑:Base
,Normal
并且Special
是框架的内部类,我无法直接更改,因此无法进行涉及更改类的解决方案
检查特定类型的泛型函数不是真正的泛型,不是吗?因此,除了拥有一个仅根据实际类型将调用委派给另一个方法的方法之外,首先要针对不同类型使用不同的方法:
public void DoWorkBase() { ... }
public void DoWorkNormal()
{
var list = GetObjectsSelectedFromNormal();
}
public void DoWorkSpecial()
{
var list = GetObjectsSelectedFromSpecial();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句