Bur*_*imi 5 c# syntax switch-statement
我有一个代码片段:
int n = 0;
for (int i = 0; i < 50;i++)
{
n = checkStatus();
switch (n)
{
case 1:
break;
break;//This is unreachable and so i cannot Terminate the For Loop within the SWITCH
}
}
Run Code Online (Sandbox Code Playgroud)
如注释中所述,我不能直接从Switch终止For循环,只有当我声明一个布尔值并且在Switch的测试结束时
if(LoopShouldTerminate)
break;
Run Code Online (Sandbox Code Playgroud)
PS:或许我很困惑!
[POST] 我得到的消息,这个问题就解决了,但我想asume,使用中的for循环开关是不是神的想法,因为我是从很多开发者的听说我应该从循环的那一刻,当突破我得到期望的结果,因此,使用开关需要的额外的布尔或推诠释i值50照片直接,但是如果我们使用while循环会发生什么?
Eri*_*ert 11
解决方案1:将循环和开关移动到不同的方法:
for(int i = 0; i < 50; ++i)
{
if (DoCheckStatus(i)) break;
}
Run Code Online (Sandbox Code Playgroud)
...
bool DoCheckStatus(int i)
{
switch(CheckStatus(i))
{
case 1 : return true;
default: return false;
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:使用热切的扩展方法调整上述内容以消除循环:
static void DoWhile<T>(this IEnumerable<T> sequence, Func<T, bool> predicate)
{
foreach(T item in sequence)
if (!predicate(item)) return;
}
...
Enumerable.Range(0, 50).DoWhile(DoCheckStatus)
Run Code Online (Sandbox Code Playgroud)
解决方案3:调整上述内容以消除循环和辅助方法:
Enumerable.Range(0, 50).DoWhile(i=>
{
switch(CheckStatus(i))
{
case 1 : return true;
default: return false;
}
});
Run Code Online (Sandbox Code Playgroud)
你可以使用goto
,以打破在循环内switch
.
int n = 0;
for (int i = 0; i < 50;i++)
{
n = checkStatus();
switch (n)
{
case 1:
goto outofloop;
}
}
:outofloop
// more code
Run Code Online (Sandbox Code Playgroud)
goto
...... 的少数好用之一
归档时间: |
|
查看次数: |
1016 次 |
最近记录: |