为什么在匿名方法中不能break;
在while
循环中使用语句?
当我遇到以下错误时,我正在处理下面的代码:“ Control cannot leave the body of an anonymous method or lambda expression
”。
幸运的是,我可以return;
改用解决问题,但我仍然想知道为什么不能使用break;
。对我来说,这两个语句之间的主要区别在于,它return;
退出一个方法,然后break;
退出最嵌套的循环。
我的代码,
while (someCondition)
{
System.Threading.Thread.Sleep(500);
Application.Current.Dispatcher.Invoke(new Action(() =>
{
if (someOtherCondition)
{
// Do stuff...
}
else
{
if (anotherCondition)
{
break;
}
// Do something else...
}
}));
}
重写代码有助于解释原因:
while (someCondition)
{
System.Threading.Thread.Sleep(500);
Application.Current.Dispatcher.Invoke(MyMethod);
}
private void MyMethod()
{
if (someOtherCondition)
{
// Do stuff...
}
else
{
if (anotherCondition)
{
break;
}
// Do something else...
}
}
您正在破坏一个没有循环的函数。该循环存在于另一种方法中。如您所知,因此需要调用return。仅仅因为您使用的是匿名方法,它仍然是与包含while循环的方法不同的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句