好了,可以說我有類如下列: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