在關於使用IEnumerable而不是List的初始建議之後進行編輯。在C#中返回一個列表<interface>
我試圖做到這一點:
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>'
它贏得了」不要讓我隱式或明確地做。有什麼辦法可以做到這一點?
在此先感謝,
--- Alistair。
謝謝,我可以看到我想要做什麼可能是不可能的,或者至少是危險的。但我仍然希望!我可能只需要列出通用數據和另一個完全屬於每個派生類的特定於報表的列表。 – user41013