我试图创建一些接口。 IReportSection
对象将包含一个字符串和一组项目,这些项目可能会有所不同,具体取决于我们正在使用的内容。我需要将它变成通用的吗?
IReport
将有一个字符串和一个IReportSection
的集合。
以下是我现在尝试定义的方式。
public interface IReport
{
string ReportName { get; set; }
ICollection<IReportSection> ReportSections { get; }
}
public interface IReportSection
{
string ReportSectionName { get; set; }
ICollection ReportItems { get; }
}
public abstract class ReportSectionBase : IReportSection
{
public string ReportSectionName { get; set; }
public ICollection ReportItems { get; set; }
}
我的模特:
pulic class ProjectSubmissionViewModel
{
public int ProjectSubmissionId { get; set; }
public string SubmissionTitle { get; set; }
}
pulic class AffiliateViewModel
{
public int AffiliateId { get; set; }
public string AffiliateName { get; set; }
}
这就是我尝试在代码中使用它的方式:
public class ChapterAffiliates : ReportSectionBase
{
public string ReportSectionName { get { return "Chapter Affiliates"; } }
public ICollection<AffiliateViewModel> ReportItems { get; set; }
}
public class ChapterTitles : ReportSectionBase
{
public string ReportSectionName { get { return "Chapter Titles"; } }
public ICollection<ProjectSubmissionViewModel> ReportItems { get; set; }
}
public class SubmissionListViewModel : IReport
{
public ICollection<ProjectSubmissionViewModel> Submissions { get; set; }
public ICollection<AffiliateViewModel> Affiliates{ get; set; }
public string ReportName { get; set; }
public ICollection<IReportSection> ReportSections
{
get
{
var affiliateSection = new ChapterAffiliates
{
ReportItems = Affiliates
};
var titleSection = new ChapterTitles
{
ReportItems = Submissions.Where(s => s.SubmissionTitle.Contains("SomePhrase")).ToList()
};
var sections = new List<IReportSection> { {subSection}, {titleSection} };
return sections;
}
}
}
我不确定如何最好地定义它。我很确定我之前已经做过,但它没有找到我。
答案 0 :(得分:1)
某个报告中TRType
的类型参数是否完全相同?例如。你会在其中包含不同报告类型的报告部分吗?
如果报告中的所有类型都相同,则解决方案相对简单:
public interface IReport<T> { ... }
如果不是这种情况 - 你必须做一些不同的事情,例如:
public interface IReportSection
{
string ReportSectionName { get; }
ICollection ReportItems { get; }
}
public abstract class ReportSectionBase<TRType> : IReportSection {
...
}
这允许您在与报告相关的ReportSections
集合中放置不同的基础类型。您还需要做更多的工作才能从每个报告部分获取所需的确切信息。