在关于使用 IEnumerable 而不是 List 的初步建议后编辑。
我正在尝试这样做:
public interface IKPIDetails // Previously: interface IKPIDetails
{
string name {get; set;}
//...
}
public abstract class BaseReport
{
public List<IKPIDetails> m_KPIDetails; // Previously: list<IKPIDetails> m_KPIDetails;
public BaseReport()
{
m_KPIDetails = MakeReportDataStructure();
//...
}
public abstract List<IKPIDetails> MakeReportDataStructure(); // Previously: public abstract IKPIDetails MakeReportDataStructure();
//...
}
public class AirTemp_KPIDetails : NetVisSolution.Reports.IKPIDetails // Previously: protected class AirTemp_KPIDetails : IKPIDetails
{
#region IKPIDetails implementation
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
#endregion
...
}
public class SSAirTempSummaryReport : BaseReport
{
public SSAirTempSummaryReport() : base ()
{
// Do any extra initialisation here
m_reportName = "Air Temperature Summary Report";
}
//It now complains on the declaration below at the word
// MakeReportDataStructure()
public override IEnumerable<IKPIDetails> MakeReportDataStructure() // Previously: public override List<IKPIDetails> MakeReportDataStructure()
{
List<AirTemp_KPIDetails> d = new List<AirTemp_KPIDetails>();
return d; // <-- this is where it used to break
}
//...
}
因此,我有一个报表数据对象接口和可能实现此接口并添加其特定额外位的多个报表数据类。我有一个实现通用报告功能的抽象报告类和多个派生类,每个派生类都使用自己的报告数据类。
不幸的是,当我尝试在派生类中创建我的报告详细结构列表并将其作为接口列表传递回基类时,它会抱怨:
Cannot implicitly convert type
'System.Collections.Generic.List<NetVisSolution.Reports.AirTemp_KPIDetails>' to
'System.Collections.Generic.List<NetVisSolution.Reports.IKPIDetails>'
它不会让我隐含或明确地做到这一点。有什么办法可以做到这一点吗?
提前致谢,
--- 阿利斯泰尔。