gpt4 book ai didi

c#-2.0 - 使用 yield return 时未调用方法

转载 作者:行者123 更新时间:2023-12-04 07:13:25 25 4
gpt4 key购买 nike

我在使用 yield return 的方法时遇到了一些麻烦这不起作用...

public IEnumerable<MyClass> SomeMethod(int aParam)
{
foreach(DataRow row in GetClassesFromDB(aParam).Rows)
{
yield return new MyClass((int)row["Id"], (string)row["SomeString"]);
}
}

上面的代码永远不会运行,当调用这个方法时,它只是跳过它。

但是,如果我更改为...
public IEnumerable<MyClass> SomeMethod(int aParam)
{
IList<MyClass> classes = new List<MyClass>();

foreach(DataRow row in GetClassesFromDB(aParam).Rows)
{
classes.Add(new MyClass((int)rows["Id"], (string)row["SomeString"]);
}

return classes;
}

它工作得很好。

我不明白为什么第一种方法永远不会运行,你能帮我理解这里发生了什么吗?

最佳答案

“yield”版本仅在调用者实际开始枚举返回的集合时“运行”。

例如,如果您只获得集合:

var results = SomeObject.SomeMethod (5);

不要用它做任何事情, SomeMethod不会执行。

仅当您开始枚举 results 时收藏,它会击中。
foreach (MyClass c in results)
{
/* Now it strikes */
}

关于c#-2.0 - 使用 yield return 时未调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2652656/

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