gpt4 book ai didi

C# Generics Efficiency,一种更好的方法

转载 作者:行者123 更新时间:2023-11-30 17:18:42 25 4
gpt4 key购买 nike

好的,假设我有如下类:

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 });
}
}

最佳答案

一些评论

  • 无需制作data一个ref ProcessKPI 中的参数. ref参数仅对 class 有意义如果您实际分配给它,请输入 C#。在这里你只是修改对象所以 ref除了笨拙的调用语法,你什么都没有
  • 尽管Count已签名,它永远不会返回负值。
  • 我更喜欢 (IEnumerable<object>)item.Dataas IEnumerable<object>版本。如果后者失败,将导致 ArgumentNullException。当它真的是一个类型转换问题时。

关于C# Generics Efficiency,一种更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com