我使用的方法遇到了一些问题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(使用前将#替换为@)