相关疑难解决方法(0)

LINQ相当于foren for IEnumerable <T>

我想在LINQ中做相同的以下内容,但我无法弄清楚如何:

IEnumerable<Item> items = GetItems();
items.ForEach(i => i.DoStuff());
Run Code Online (Sandbox Code Playgroud)

什么是真正的语法?

linq ienumerable foreach

694
推荐指数
12
解决办法
46万
查看次数

为什么IList <T>上的.ForEach()而不是IEnumerable <T>?

可能重复:
为什么IEnumerable接口上没有ForEach扩展方法?

我注意到在编写LINQ-y代码时,.ForEach()是一个很好用的习惯用法.例如,这是一段代码,它接受以下输入,并产生这些输出:

{ "One" } => "One"
{ "One", "Two" } => "One, Two"
{ "One", "Two", "Three", "Four" } => "One, Two, Three and Four";
Run Code Online (Sandbox Code Playgroud)

和代码:

private string InsertCommasAttempt(IEnumerable<string> words)
{
    List<string> wordList = words.ToList();
    StringBuilder sb = new StringBuilder();
    var wordsAndSeparators = wordList.Select((string word, int pos) =>
        {
            if (pos == 0) return new { Word = word, Leading = string.Empty };
            if (pos == wordList.Count - 1) return new { Word = word, Leading = " …
Run Code Online (Sandbox Code Playgroud)

c# linq ienumerable list c#-3.0

52
推荐指数
3
解决办法
3万
查看次数

为什么List <T> .ForEach比标准foreach更快?

考虑一下:

必要的:

//The alphabet from a-z
List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1)
.Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
Run Code Online (Sandbox Code Playgroud)

标准foreach:

foreach (var range in letterRange)
{
    Console.Write(range + ",");
}
Console.Write("\n");
Run Code Online (Sandbox Code Playgroud)

内置的foreach:

letterRange.ForEach(range => Console.Write(range + ",")); //delegate(char range) works as well
Console.Write("\n");
Run Code Online (Sandbox Code Playgroud)

我已经尝试过将它们相互对准,并且内置的foreach速度提高了2倍,这似乎很多.

我用Google搜索过,但我似乎无法找到任何答案.

另外,关于:在.NET中,哪个循环运行得更快,'for'或'foreach'?

for (int i = 0; i < letterRange.Count; i++)
{
    Console.Write(letterRange[i] + ",");
}
Console.Write("\n");
Run Code Online (Sandbox Code Playgroud)

据我所知,不执行比标准foreach更快.

.net c# foreach benchmarking list

2
推荐指数
2
解决办法
3806
查看次数

标签 统计

c# ×2

foreach ×2

ienumerable ×2

linq ×2

list ×2

.net ×1

benchmarking ×1

c#-3.0 ×1