我遇到一个方法,我使用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"]);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码永远不会运行,当调用此方法时,它只是跨过它.
但是,如果我改为......
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;
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
我不明白为什么第一种方法永远不会运行,你能帮助我理解这里发生的事情吗?
小智 8
当调用者实际开始枚举返回的集合时,"yield"版本仅"运行".
例如,如果您只获得该集合:
var results = SomeObject.SomeMethod (5);
Run Code Online (Sandbox Code Playgroud)
并且不做任何事情,SomeMethod不会执行.
只有当你开始枚举results集合时,它才会被击中.
foreach (MyClass c in results)
{
/* Now it strikes */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |