C# 无法从类型 'T' 隐式转换为类型 'T'

C# Cannot implicitly convert from type 'T' to type 'T'

我收到错误消息“无法在 ToViewDocument 方法中从类型 'SpecificT' 隐式转换为类型 '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;
    }

该函数覆盖基础 class 方法:

public abstract T ToViewDocument<T>(XmlEntity entity, DocKey documentKey) where T : ViewDocumentDto, new();

而且 SpecifiedT 扩展了 T,所以我不明白为什么编译器不能将 SpecifiedT 识别为 T 的子class。

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

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