C#不能隐式类型从“T”转换为类型“T”
问题描述:
我收到错误消息“不能隐式地从类型‘SpecificT’的方法ToViewDocument键入‘The.Right.Namespace.SpecificT’转换。C#不能隐式类型从“T”转换为类型“T”
。看来,在这个方法中,我重新定义类型SpecificT
这是方法,让我的烦恼:
public override SpecifiedT
ToViewDocument<SpecifiedT>(XmlEntity entity, DocKey docKey)
{
switch (docKey.IdArchive)
{
case IdArchive.A:
return ToAViewData((XmlDocA)entity, docKey) //error at this line;
default:
return ToBViewData((XmlDocB)entity, docKey) //error at this line;
}
}
private SpecifiedT ToAViewData(XmlDocMassima entity, DocKey documentKey)
{
SpecifiedT result = new SpecifiedT();
//map result on entity result
//...
return result;
}
该功能覆盖了基类的方法:
public abstract T ToViewDocument<T>(XmlEntity entity, DocKey documentKey) where T : ViewDocumentDto, new();
而且SpecifiedT延伸牛逼,所以我不明白为什么编译器不能识别SpecifiedT为T.
答
的一个子类不能覆盖的通用方法,并指定类型参数。您可以将类型参数添加到包含的类中。然后当你实现这个类时,类型参数将被设置为具体类型。
abstract class Container<T>
where T : ViewDocumentDto, new()
{
public abstract T ToViewDocument(XmlEntity entity, DocKey documentKey);
}
class SpecificContainer : Container<SpecificViewDocumentDto>
{
public override SpecificViewDocumentDto ToViewDocument(XmlEntity entity, DocKey documentKey)
{
}
}
包含的类定义是什么样的? –
你想'SpecifiedT'是一个实际的类?或者你打算将它作为一个类型参数吗? –
在'ToViewDocument'' SpecifiedT'是一个类型参数,但是在'ToAViewData'中它似乎是一个具体的类?如果是这样,这将不会起作用,因为它是在调用'ToViewDocument'时选择'SpecifiedT'的客户端,例如'ToViewDocument(entity,docKey)'。 –
Lee