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
的专门调用?