gpt4 book ai didi

linq - 这个 linq 查询是否在 for-each 循环的每次迭代中运行?

转载 作者:行者123 更新时间:2023-12-04 14:37:27 27 4
gpt4 key购买 nike

在关于 SO 的另一个问题中,我用类似下面的代码回答并得到了一条评论,即可能在 for/each 的每次迭代中都对 LINQ 查询进行了评估。真的吗?

我知道 LINQ-querys 在其项目被评估之前不会执行,所以这种迭代结果的方式似乎可以让它在每次迭代中运行?

Dim d = New Dictionary(Of String, String)()    
d.Add("Teststring", "Hello")
d.Add("1TestString1", "World")
d.Add("2TestString2", "Test")

For Each i As String In From e In d Where e.Value.StartsWith("W") Select e.Key
MsgBox("This key has a matching value:" & i)
Next

最佳答案

不......在foreach中,“GetEnumerator”只被调用一次(永远),并且会继续使用。

编辑:我在这里发表了一个关于临时存储结果集的声明……这仅适用于某些情况……不是这个,所以我把它拿出来了。

编辑:请原谅这过于冗长......但我想告诉你发生了什么......所以这是一个控制台应用程序:)

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
foreach (string item in MyCustomEnumerator()
.Where(item => item.StartsWith("abc")))
{
Console.WriteLine(item);
}
}

static IEnumerable<string> MyCustomEnumerator()
{
Console.WriteLine(DateTime.Now);

yield return "abc1";

Console.WriteLine(DateTime.Now);

yield return "abc2";

Console.WriteLine(DateTime.Now);

yield return "abc3";

Console.WriteLine(DateTime.Now);

yield return "xxx";
}
}
}

编辑:这将导致 DateTime,然后是 abc1,然后是 DateTime,然后是 abc2,然后是 DateTime,然后是 abc3,然后是 DateTime。

关于linq - 这个 linq 查询是否在 for-each 循环的每次迭代中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332864/

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