gpt4 book ai didi

c# - 将 Lambda 选择器作为参数传递

转载 作者:行者123 更新时间:2023-11-30 20:04:09 25 4
gpt4 key购买 nike

我正在处理一些报告代码,我发现自己一遍又一遍地重复一段包含 where 和 select cause 的代码?唯一变化的信息是目标字段。

    private static void UpdateResultsListInstructions(List<ManagementInfo> managementInfo, KeyValuePair<int, int> item)
{
managementInfo
.Where(m => m.YearMonthNo == item.Key)
.Select(m => m.VolumeOfInstructionsReceivedInMonth = item.Value)
.ToList();
}

private static void UpdateResultsListClaims(List<ManagementInfo> managementInfo, KeyValuePair<int, int> item)
{
managementInfo
.Where(m => m.YearMonthNo == item.Key)
.Select(m => m.VolumeOfClaimsCancelled = item.Value)
.ToList();
}

是否可以将选择器作为参数传递,以便我可以重用一个方法?

按照

UpdateCommonResultsList(managementInfo, item, (m => m.VolumeOfClaimsCancelled = item.Value))

我可能可以重新调整所有代码,这样就没有必要了,但现在我有了这个想法,我想看看它是否可行。任何帮助表示赞赏。

最佳答案

尽管我不喜欢使用Select更新 一个列表——我误解了这个问题,因为这样做并不常见! - 您可以按如下方式进行:

private static void UpdateCommonResultsList(
List<ManagementInfo> managementInfo,
KeyValuePair<int, int> item,
Action<ManagementInfo, int> action)
{
managementInfo
.Where(m => m.YearMonthNo == item.Key)
.Select(m => { action(m, item.Value); return item.Value; })
.ToList();
}

调用为

UpdateCommonResultsList(
managementInfo,
item,
(m, i) => m.VolumeOfClaimsCancelled = i);

如果你这样做,你的代码会更传统

private static void UpdateCommonResultsList(
List<ManagementInfo> managementInfo,
KeyValuePair<int, int> item,
Action<ManagementInfo, int> action)
{
foreach (ManagementInfo m in managementInfo
.Where(m => m.YearMonthNo == item.Key))
{
action(m, item.Value);
}
}

关于c# - 将 Lambda 选择器作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348196/

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