C#不能隐式地从类型'T'转换为'T'类型

时间:2017-09-04 15:05:30

标签: c# generics implicit-cast

我收到错误消息“无法从类型'SpecificT'隐式转换为在方法ToViewDocument中键入'The.Right.Namespace.SpecificT'。

似乎在这种方法中我正在重新定义类型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扩展了T,所以我无法理解为什么编译器无法将SpecifiedT识别为T的子类。

1 个答案:

答案 0 :(得分:3)

您不能覆盖泛型方法并指定类型参数。您可以将type参数添加到包含的类中。然后,当您实现类时,type参数将设置为具体类型。

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)
    {
    }
}