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)
{
}
}
我收到错误消息“无法在 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)
{
}
}