首先让我说使用接口我是个新手。
我正在写一个方法(GetClaimDetails),它将返回有关医疗保险索赔的信息。如果它是声明类型A,它将返回ClaimDetailA类的列表。如果声明类型B,则返回ClaimDetailB类的列表。这两个类共享公共属性,但每个类都具有唯一属性。公共属性在接口中实现。
我提取了一个名为IClaimDetail的接口并设置它们来实现它。当我设置方法返回IClaimDetail并让它返回实现IClaimsDetail的对象的实例时,我得到编译器消息
'无法将类型'System.Collections.Generic.List DentalClaimDetail'隐式转换为'System.Collections.Generic.List IClaimDetail'
private static List<IClaimDetail> GetClaimDetailsB(string claimNumber, string connectionStringName)
{
var claimReportRows = new List<DentalClaimDetail>();
..removed for brevity
return claimReportRows;
}
public class DentalClaimDetail : IClaimDetail
{
...
}
当一个方法返回一个接口时,你只需返回一个实现该接口的对象。正确?我做错了什么?
答案 0 :(得分:7)
var claimReportRows = new List<IClaimDetail>();
改变这一点。然后,您仍然可以将DentalClaimDetail
插入其中。
答案 1 :(得分:1)
泛型实际上在编译时为每个泛型参数动态生成一个类型,因此List&lt; IClaimDetail&gt;是一种类型,List&lt; DentalClaimDetail&gt;实际上是另一种类型,所以你会得到编译器错误。
是的,跛脚,但只是改变你的电话,如Daniel A. White所述
var claimReportRows = new List<IClaimDetail>();
(虽然您应该只能直接使用该类型,除非您使用Linq)然后让代码使用强制转换将DentalClaimDetail强制转换为IClaimDetail应该可以解决问题。 如果不使用Linq,您可以执行以下操作:
List<IClaimDetail> claimReportRows = new List<IClaimDetail>();
//...populate Dentail Claims Here...
foreach(DentalClaimDetail dcd in dentalClaims)
{
claimReportRows.Add((IClaimDetail)dcd);
}
return claimReportRows.
希望这有帮助!