使用yield return时未调用方法

2023-11-21

我使用的方法遇到了一些问题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 */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用yield return时未调用方法 的相关文章

随机推荐