C#无法从类型';隐式转换;T';输入';T';

C#无法从类型';隐式转换;T';输入';T';,c#,generics,implicit-conversion,C#,Generics,Implicit Conversion,我在方法ToViewDocument中得到错误消息“无法隐式地从类型'specifit'转换为类型'the.Right.Namespace.specifit' 似乎在这个方法中,我重新定义了特定类型 这就是给我带来麻烦的方法: public override SpecifiedT ToViewDocument<SpecifiedT>(XmlEntity entity, DocKey docKey) { switch (docKey.IdArchive)

我在方法ToViewDocument中得到错误消息“无法隐式地从类型'specifit'转换为类型'the.Right.Namespace.specifit'

似乎在这个方法中,我重新定义了特定类型

这就是给我带来麻烦的方法:

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 override SpecifiedT
ToViewDocument(XmlEntity实体,DocKey DocKey)
{
开关(docKey.IdArchive)
{
案例I存档。A:
返回到ViewData((XmlDocA)entity,docky)//此行出错;
违约:
返回ToBViewData((XmlDocB)entity,docky)//此行出错;
}
}
私有指定的视图数据(XmlDocMassima实体,docky documentKey)
{
SpecifiedT结果=新的SpecifiedT();
//将结果映射到实体结果
//...
返回结果;
}
该函数重写基类的方法:

public abstract T ToViewDocument<T>(XmlEntity entity, DocKey documentKey) where T : ViewDocumentDto, new();
public abstract T-to-viewDocument(XmlEntity-entity,docky-documentKey),其中T:ViewDocumentDto,new();

此外,SpecifiedT扩展了T,因此我无法理解为什么编译器不能将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)
    {
    }
}
抽象类容器
其中T:ViewDocumentDto,new()
{
公共摘要T ToViewDocument(XmlEntity,DocKey documentKey);
}
类特定容器:容器
{
公共覆盖SpecificViewDocumentdToViewDocument(XmlEntity实体,DocKey documentKey)
{
}
}

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

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)
    {
    }
}
抽象类容器
其中T:ViewDocumentDto,new()
{
公共摘要T ToViewDocument(XmlEntity,DocKey documentKey);
}
类特定容器:容器
{
公共覆盖SpecificViewDocumentdToViewDocument(XmlEntity实体,DocKey documentKey)
{
}
}

包含的类定义是什么样子的?您希望
SpecifiedT
是一个实际的类?还是希望它成为一个类型参数?在
ToViewDocument
中,SpecifiedT是一个类型参数,但在
toviewData
中,它似乎是一个具体的类?如果是这样,这将永远不会起作用,因为它是客户端调用
ToViewDocument
时选择
SpecifiedT
,例如
ToViewDocument(entity,docKey)
。您可能需要指定一个
,其中T:class,new()
在通用模式中definition@TitianCernicova-Dragomir SpecifiedT及其基类T是仅包含属性的简单类:公共类SpecifiedT:T{public string Prop1{get;set;}public string Prop2{get;set;}public string Prop3{get;set;}…}包含的类定义是什么样子的?您希望
SpecifiedT
是一个实际的类?还是希望它成为一个类型参数?在
ToViewDocument
SpecifiedT
中是一个类型参数,但在
toviewdata
中它似乎是一个具体的类?如果是这样的话,这将永远不会起作用,因为c调用
ToViewDocument
时选择
SpecifiedT
,例如
ToViewDocument(entity,docKey)
。您可能需要在泛型中指定一个
,其中T:class,new()
definition@TitianCernicova-Dragomir SpecifiedT及其基类T是仅包含属性的简单类:public class SpecifiedT:T{public string Prop1{get;set;}public string Prop2{get;set;}public string Prop3{get;set;}…}