c#-使用yield时,在try / catch中包装对迭代器的调用
作者:互联网
我需要在要实现为迭代器(使用yield)的方法中执行一些笨拙的逻辑:
public IEnumerable<Things> GetMoreThings() {
while (goodStuffHappens()) {
Things moreThingsIWant = TemptFateAgain();
if (moreThingsIWant.Any())
yield return moreThingsIWant;
}
}
在调用方法中,我需要将对GetMoreThings的调用包装在try / catch中,然后yield返回结果:
try {
foreach (Things thing in Helpful.GetMoreThings())
yield return thing;
}
catch (Exception e) {
//crash, burn
}
发起者将立即意识到这是不可能的-there is no such thing as a yield inside a try
/catch
block(仅尝试/最终).
有什么建议吗?
解决方法:
这两个答案都是正确的.这个没有内置的快捷方式,您需要在一段时间内梳理迭代器,而不是for循环,以便将对Enumerator.MoveNext()的调用与对Enumerator.Current的使用分开.
IEnumerator<Things> iterator = Helpful.GetMoreThings.GetEnumerator();
bool more = true;
while (more) {
try {
more = iterator.MoveNext();
}
catch (Exception e) {
//crash, burn
}
if (more)
yield return iterator.Current;
}
标签:yield-return,try-catch,c 来源: https://codeday.me/bug/20191027/1943882.html