好了,可以说我有类如下列:C#泛型的效率,更好的方法来做到这一点
public class KPIObject<T> //<--This class where T is the following classes
{
public List<T> Data { get; set; }
public string Caption { get; set; }
}
public class KPICycleCountAccuracyData //<--There are 20 of these with different names and values
{
public string Facility { get; set; }
public string CCAdjustedCases { get; set; }
public string TotalCases { get; set; }
public string CCAdjustedPercent { get; set; }
}
然后,我有:
public List<ReportData>> ProcessAccountReport(GetAccountReport request)
{
var data = new List<ReportData>();
ProcessKPI(data, request.KPICycleCountAccuracy, "KPICycleCountAccuracy"); //<-- 20 of these
return data;
}
这里是ProcessKPI方法:
private static void ProcessKPI<T>(List<ReportData> data, ICollection<KPIObject<T>> items, string name)
{
if (items == null || items.Count <= 0) return;
foreach (var item in items)
{
if (item.Data == null || item.Data.Count <= 0) continue;
var temp = new List<object>();
temp.AddRange((IEnumerable<object>)item.Data);
data.Add(new ReportData { Data = temp, Name = name, Title = item.Caption });
}
}
所有这些工作和编译正确,我只是想知道这是否是这样做的最有效的方式。
谢谢。
编辑
我改变过程KPI这样:
private static void ProcessKPI<T>(ICollection<ReportData> data, ICollection<KPIObject<T>> items, string name)
{
if (items == null || items.Count <= 0) return;
foreach (var item in items.Where(item => item.Data != null && item.Data.Count > 0))
{
data.Add(new ReportData { Data = (IEnumerable<object>)item.Data, Name = name, Title = item.Caption });
}
}
只是要清楚你正在寻找什么类型的效率增益:你是否说你正在对ProcessKPI()进行20次调用(对于你在第一个代码片断中指出的20种类型中的每一种都有一个调用),如果你添加了一个类型,你将不得不再增加一个调用到'ProcessKPI()'等等。你正在寻找一种更具扩展性的方式来编写这段代码? – 2011-04-04 19:56:14
性能,更少的代码,内存问题。是的,如果我添加另一个班级,我必须再次进行ProcessKPI调用。 – Cyberdrew 2011-04-04 19:57:51
不知道它的长度,但我知道你的数据参数不需要是ref,因为它不是一个值类型。 – 2011-04-04 19:58:46