这是我能得到的最简洁的单行...
report.Load(Server.MapPath(string.Format("~/Content/StimulReports/{0}Group.mrt", data.CompareId == 2 ? "Month" : "Year")));
但是,您似乎只是想让事情看起来更干净。数据调用和条件逻辑之间的更多抽象。您可能想考虑使它们成为单独的方法,也许在您的报告对象上?
if(data.CompareId == 2)
report.LoadStimulReports(ReportGroup.Month);
else
report.LoadStimulReports(ReportGroup.Year);
在报表对象上使用枚举、扩展方法和静态方法...
public enum ReportGroup
{
[DescriptionAttribute("~/Content/StimulReports/MonthGroup.mrt")]
Month,
[DescriptionAttribute("~/Content/StimulReports/YearGroup.mrt")]
Year
}
public static T GetAttribute<T>(this Enum e) where T : Attribute
{
System.Reflection.FieldInfo fi = e.GetType().GetField(e.ToString());
object[] o = (object[])fi.GetCustomAttributes(typeof(T), false);
return o.Length > 0 ? (T)o[0] : default(T);
}
public static void LoadStimulReports(ReportGroup reportGroup)
{
report.Load(Server.MapPath(reportGroup.GetAttribute<DescriptionAttribute>().Description));
}
现在,如果您需要另一个报告,您可以简单地将另一个项目添加到枚举中。
[DescriptionAttribute("~/Content/StimulReports/WeekGroup.mrt")]
Week