kbt*_*tzr 2 c# linq iterator yield-return
请考虑以下C#块:
int resultIndex = 0;
Result firstResult = results.First();
DoAVeryImportOperationWithFirstResult(firstResult);
Console.WriteLine(String.Format("This is the {0} result.", resultIndex++));
yield return firstResult;
foreach(Result result in results)
{
Console.WriteLine(String.Format("This is the {0} result.", resultIndex++));
yield return result;
}
Run Code Online (Sandbox Code Playgroud)
如果您熟悉Linq和Iterators,您会注意到在foreach块的第一次迭代中,将返回结果的第一个结果而不是第二个结果.
所以,基本上这是我的问题:我无法从迭代器方法获取第一个值,然后在其他地方使用它而无需重新启动此方法.
有人知道一些解决方法吗?
其他人已经展示了使用foreach循环和条件执行的方法.这实际上是一种巧妙的方法 - 但是如果foreach循环因任何原因而不合适,这是另一种选择.
using (var iterator = results.GetEnumerator())
{
if (!iterator.MoveNext())
{
// Throw some appropriate exception here.
}
Result firstResult = iterator.Current;
DoAVeryImportOperationWithFirstResult(firstResult);
Console.WriteLine(String.Format("This is the {0} result.", resultIndex++));
yield return firstResult;
while (iterator.MoveNext())
{
Result result = iterator.Current;
Console.WriteLine(String.Format("This is the {0} result.", resultIndex++));
yield return result;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |