当前位置:  开发笔记 > 小程序 > 正文

使用yield return时未调用的方法

如何解决《使用yieldreturn时未调用的方法》经验,为你挑选了1个好方法。

我遇到一个方法,我使用yield return它不起作用...

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

上面的代码永远不会运行,当调用此方法时,它只是跨过它.

但是,如果我改为......

public IEnumerable SomeMethod(int aParam)
{
    IList classes = new List();

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

    return classes;
}

它工作得很好.

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



1> 小智..:

当调用者实际开始枚举返回的集合时,"yield"版本仅"运行".

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

var results = SomeObject.SomeMethod (5);

并且不做任何事情,SomeMethod不会执行.

只有当你开始枚举results集合时,它才会被击中.

foreach (MyClass c in results)
{
    /* Now it strikes */
}

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有