C# 在c中强制转换泛型函数类型参数#

C# 在c中强制转换泛型函数类型参数#,c#,generics,casting,typecasting-operator,C#,Generics,Casting,Typecasting Operator,我有两个可以接受泛型类型参数的泛型函数,我有三个主要类和许多子类 类别:基本,普通,特殊 Special和Normal都继承自base,Special是最后一个类,但Normal有许多子类 我的职能如下 public void doWork<T>() where T:Base { list<T> = typeof(T) == typeof(Special) ? (List<T>)Convert.ChangeType(G

我有两个可以接受泛型类型参数的泛型函数,我有三个主要类和许多子类

类别:
基本
普通
特殊

Special
Normal
都继承自
base
Special
是最后一个类,但
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
}
   
但是排队

... : (List<T>)GetObjectsSelectedFromNormal<T>();
…:(列表)GetObjectsSelectedFromNormal();
我得到了错误

类型“T”不能用作泛型类型或方法“myProject.GetObjectsSelectedFromNormal()”中的类型参数“T”。没有从“T”到“Normal”的隐式引用转换

有没有办法强制转换泛型类型参数?不是
T
类型的对象,而是转换/强制执行
T
类型本身?我所看到的每一个地方,都只是在谈论在
T

编辑:
Base
Normal
Special
是框架的内部类,我无法直接修改,因此涉及修改类的解决方案是不可能的

检查特定类型的泛型函数不是真正的泛型,是吗?因此,与其使用一个只根据实际类型将调用委托给另一个方法的方法,不如首先为不同的类型使用不同的方法:

public void DoWorkBase() { ... }
public void DoWorkNormal() 
{
    var list = GetObjectsSelectedFromNormal();
}
public void DoWorkSpecial() 
{ 
    var list = GetObjectsSelectedFromSpecial();
}

检查特定类型的泛型函数不是真正的泛型函数,是吗?因此,与其使用一个只根据实际类型将调用委托给另一个方法的方法,不如首先为不同的类型使用不同的方法:

public void DoWorkBase() { ... }
public void DoWorkNormal() 
{
    var list = GetObjectsSelectedFromNormal();
}
public void DoWorkSpecial() 
{ 
    var list = GetObjectsSelectedFromSpecial();
}

GetObjectsSelectedFromNormal T对于需要特定对象类型的方法来说是有效参数。在这种情况下,T只是“基本”而不是“正常”。这可能就是原因。@MortenBork没问题,但我可以保证运行时
T
将是
Normal
类型。。。有没有办法告诉c#这段代码没问题?甚至是一些骇人听闻的东西?(我来自C++,而不被用于不信任我的语言)为什么不在代码< >特殊< /代码>中重写<代码> DoWork <代码>?嗯,一个泛型函数,有一些类型检查,比如<代码>类型(t)=类型(特殊)< /代码>违背了泛型的目的,这是“无论实际的
T
“我觉得这很奇怪。您的
doWork
方法采用任何类型的
Base
类型,但在其中,有一个专门的调用,它使用
Normal
?GetObjectsSelectedFromNormal T有效参数来表示需要特定对象类型的方法。在这种情况下,T只是“基本”而不是“正常”。这可能就是原因。@MortenBork没问题,但我可以保证运行时
T
将是
Normal
类型。。。有没有办法告诉c#这段代码没问题?甚至是一些骇人听闻的东西?(我来自C++,而不被用于不信任我的语言)为什么不在代码< >特殊< /代码>中重写<代码> DoWork <代码>?嗯,一个泛型函数,有一些类型检查,比如<代码>类型(t)=类型(特殊)< /代码>违背了泛型的目的,这是“此函数以相同的方式处理所有类型,而不管实际的
T
”。我觉得这很奇怪。您的
doWork
方法接受任何类型的
Base
类型,但在其中,有一个使用
Normal
的专门调用?