使用索引的List<T>.ForEach

33

我正在尝试查找以下代码的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);

但我还没有找到一种确定循环正在进行的迭代次数的方法。任何帮助都将不胜感激!


捐赠是否有一个.IndexOf()方法? - Josh C.
2
你可以使用int i = 0; donations.ForEach(x=> nvc.Add("item_name_" + i++, ...,但是不确定它有多安全。 - lc.
12个回答

-2

强烈建议不要使用这种方法,除非你是在戏弄你的朋友

这是一种使用Linq创建“For”循环的方法,但有很多缺点:

int[] arr = new int[] {1, 1, 1, 1};

Enumerable.Range(0, arr.length)
    .ToList()
    .ForEach(i => 
        {
            arr[i] += 2;
        });

数组现在应该是{3, 3, 3, 3}

再次强调,不要使用这个!

其中一些缺点包括(但不限于):

  • 性能非常慢
  • 大量的内存使用
  • 难以阅读

以下是一个难以阅读的示例: Unreadable example

我制作了这个代码,以便我的朋友不会乱动我的代码。

该代码创建了一个“for”循环,从0.00到1.00以0.01的增量进行,并且然后“烘焙”曲线。


不错的鲁滨逊环啊 :-D - browncoatcoder

-3
一个糟糕的解决方案是简单地使用select并返回一个无用的值。
items.toList().Select((el, index) =>
{
    el.doStuff();
    return 0;
});

1
我刚刚做了这件事。别告诉任何人,哈哈。 - Jason C
1
@JasonC 你的秘密与我同在。 - John
这段代码的问题几乎和单词数一样多。它什么也没做,因为语句没有被执行。而且当拼写被更正后,“ToList”是多余的。Select体不对“index”做任何操作。当被执行时,它只会返回一列零并(可能)改变源对象,这并不是要求的。它不会向“NameValueCollection nvc”加入任何内容。很差劲。 - Gert Arnold
2
@GertArnold 这是伪代码,旨在传达概念。不是可粘贴的示例。如果您要抱怨拼写错误,那么您应该知道句子不以“And”开头。ToList不是多余的,因为它意味着items是需要转换的标准类型数组。它与索引无关,只是显示它是否可用。foreach本来就不需要返回任何东西,所以我不知道你为什么在抱怨。 - John
@GertArnold 即使ToList是多余的,也没有人会强迫你不输入它。此外,伪代码在示例中非常有用,尽管是的,你需要一个具有基本推理能力的合理功能的神经网络来应用这个概念,这可能对你来说是一个问题或者不是。 - Jason C
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接