我正在尝试查找与以下代码等效的 LINQ:
NameValueCollection nvc = new NameValueCollection();
List<BusinessLogic.Donation> donations = new List<BusinessLogic.Donation>();
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");
for(var i = 0; i < donations.Count(); i++)
{
// NOTE: item_number_ + i - I need to be able to do this
nvc.Add("item_number_" + i, donations[i].AccountName);
}
我希望我可以使用类似的东西:
NameValueCollection nvc = new NameValueCollection();
List<BusinessLogic.Donation> donations = new List<BusinessLogic.Donation>();
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.ForEach(x => nvc.Add("item_name_" + ??, x.AccountName);
但我还没有找到一种方法来确定循环在哪一次迭代上。任何帮助将不胜感激!
最佳答案
LINQ 没有 ForEach
方法,这是有充分理由的。 LINQ 用于执行查询。它旨在从某些数据源获取信息。它不是旨在改变数据源。 LINQ 查询不应引起副作用,这正是您在这里所做的。
List
类确实 有一个ForEach
方法,这就是您正在使用的方法。因为它实际上不在 System.Linq
命名空间中,所以从技术上讲它不是 LINQ 的一部分。
您问题中的 for
循环没有任何问题。尝试以您尝试的方式更改它是错误的(从良好实践的角度来看)。
Here是一个更详细讨论问题的链接。
现在,如果您想忽略该建议并使用 ForEach
方法,那么编写一个为操作提供索引的方法并不难:
public static void ForEach<T>(this IEnumerable<T> sequence, Action<int, T> action)
{
// argument null checking omitted
int i = 0;
foreach (T item in sequence)
{
action(i, item);
i++;
}
}
关于c# - List<T>.ForEach 带索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13054281/