我有两个列表,其中一个是2个字符串的列表(dteSubstringList)。 另一个列表是可变字符串长度列表(表)。
我只想在字符数等于 2 时更新第二个列表中的项目。
我可以使用 while 来完成此操作,但我想使用更优雅的方式,例如 LINQ。
这是当前代码:
int index = 0;
for (int i = 0; i < table.Count; i++)
{
if (table[i].Data.Length == 2)
{
table[i].Data = dteSubstringList[index].Mte;
index++;
}
}
您应该仅使用 LINQ 来查询数据,而不是修改/更新数据。因此,在这种情况下,您可以确定需要使用 LINQ 更新的项目,然后使用普通循环来修改它们。您可以使用
Enumerable.Zip
通过索引链接两个集合:
var itemsToChange = table.Zip(dteSubstringList, (table, subList) => (Table:table, SubList: subList))
.Where(x => x.Table.Data.Length == 2);
foreach (var item in itemsToChange)
{
item.Table.Data = item.SubList.Mte;
}
嗯,我个人认为你所拥有的已经足够了,但我仍然会尽力给你一个答案。我想说唯一可以提高可读性的部分是这样的
var tabDateWithTwo = table.Where(t => t.Data.Length == 2).ToList();
for (int i = 0; i < tabDateWithTwo.Count; i++)
{
tabDateWithTwo[i].Data = dteSubstringList[i].Mte;
}