[英]How do I write a function with variable classes in C#
我的应用程序的多个位置都有以下代码:
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
var dataSourceSubReport = (XRSubreport)oRpt.FindControl("xrSubreportSite", false);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
它用于oRpt
类型不同的多个地方。 我试图使用像这样的通用东西
public static T SetEventHeader<T>(T oRpt , Guid studyPK)
{
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
var dataSourceSubReport = (XtraReport)oRpt.FindControl("xrSubreportSite", false);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
return oRpt;
}
但是当我到达终点时
var dataSourceSubReport = (XtraReport)oRpt.FindControl("xrSubreportSite", false);
并且oRpt
即使我使用每个类的基类进行oRpt
它也没有FindControl
函数。
有没有人对我如何让它发挥作用有任何建议?
您需要做的是将T
的值限制为所有oRpt
共享的基类或接口。 您可以通过添加“通用约束”来做到这一点。
在您的情况下,我怀疑您正在编写一个网站,因此所有oRpt
的基类都可以是System.Web.UI.Control 。 如果不是,则为您的特定需求制定适当的基类型(类或接口)。
public static T SetEventHeader<T>(T oRpt , Guid studyPK)
// Add a "generic constraint" to ensure T is a Control.
where T : System.Web.UI.Control
{
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
var dataSourceSubReport = (XtraReport)oRpt.FindControl("xrSubreportSite", false);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
return oRpt;
}
感谢 RB,因为他们给了我所需的信息。 这也让我意识到我需要投射其他东西并尝试/捕获如果该部分由于某种原因不存在。 这是最终有效的代码:
public static T SetEventHeader<T>(T oRpt, Guid studyPK)
where T : XtraReport
{
try
{
XRSubreport dataSourceSubReport = oRpt.FindControl("xrSubreportSite", false) as XRSubreport;
var subReport = new XRptEventHeader();
var eventHeaderList = FreqReports.GetEventHeaderList(studyPK);
dataSourceSubReport.ReportSource = subReport;
dataSourceSubReport.ReportSource.DataSource = eventHeaderList;
return oRpt;
}
catch (Exception ex)
{
return oRpt; //subsection not present
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.