gpt4 book ai didi

c# - 用 LINQ 替换嵌套的 foreach;修改和更新内部深处的属性

转载 作者:可可西里 更新时间:2023-11-01 07:59:36 28 4
gpt4 key购买 nike

考虑更改 5 或 6 层深对象的一个​​或多个属性的数据成员的要求。

有一些子集合需要迭代才能到达需要检查和修改的属性。

在这里,我们调用了一个方法来清除员工的街道地址。由于我们在循环中更改数据,当前的实现需要一个 for 循环来防止异常:

Cannot assign to "someVariable" because it is a 'foreach iteration variable'

这是带有嵌套 foreachfor 的当前算法(混淆)。

foreach (var emp in company.internalData.Emps)
{
foreach (var addr in emp.privateData.Addresses)
{
int numberAddresses = addr.Items.Length;

for (int i = 0; i < numberAddresses; i++)
{
//transform this street address via a static method
if (addr.Items[i].Type =="StreetAddress")
addr.Items[i].Text = CleanStreetAddressLine(addr.Items[i].Text);
}
}
}

问题:能否使用 LINQ 重新实现此算法?要求是原始集合通过该静态方法调用更改其数据。

更新:我正在考虑/倾向于 jQuery/选择器类型的解决方案。我并没有以这种方式特别说明这个问题。我意识到我在这个想法上做得过头了(没有副作用)。谢谢大家!如果有这样的方法来执行类似 jQuery 的选择器,请让我们看看!

最佳答案

foreach(var item in company.internalData.Emps
.SelectMany(emp => emp.privateData.Addresses)
.SelectMany(addr => addr.Items)
.Where(addr => addr.Type == "StreetAddress"))
item.Text = CleanStreetAddressLine(item.Text);

关于c# - 用 LINQ 替换嵌套的 foreach;修改和更新内部深处的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1336177/

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