【发布时间】:2013-10-24 12:56:47
【问题描述】:
为什么我不能在 while 循环中使用 break; 语句,而在匿名方法中?
当我收到以下错误时,我正在编写一段代码(如下):“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...
}
}));
}
【问题讨论】:
-
因为你必须先退出你的方法,然后你才能退出你的循环,而且由于匿名方法仍然是方法,所以你必须先退出它
-
@ppetrov 对,所以我必须先退出该方法(使用
return;),然后是break;循环。 -
@Sam 理论上是的,但在你的具体情况下它会更复杂,因为你只想在满足某些条件时打破循环,所以你必须找到一种方法来获得此信息在您的 while 循环中
-
@Sam,是的,您需要返回,然后休息。为此,例如将 Action 更改为 Func
并在返回 false 时中断。
标签: c# loops while-loop break anonymous-methods