c# - Break inside switch 无法终止 FOR 循环

标签 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
    }
}

如评论中所述,我不能直接从 Switch 终止 For 循环,只有当我声明一个 bool 值并在 Switch 测试结束时才可以

if(LoopShouldTerminate)
    break;

PS:也许我很困惑!

[发布] 我收到消息,问题已解决,但我想假设在 for 循环中使用 Switch 不是一个好主意,因为我从很多开发人员那里听说我应该在我得到期望的结果,所以使用 switch 需要额外的 bool 值或将 Int i 值直接推到 50,但是如果我们使用 while 循环会发生什么?

最佳答案

解决方案 1:将循环和开关移动到不同的方法:

for(int i = 0; i < 50; ++i)
{
    if (DoCheckStatus(i)) break;
}

...

bool DoCheckStatus(int i)
{
    switch(CheckStatus(i))
    {
        case 1 : return true;
        default: return false;
    }
}

解决方案 2:修改上述内容以使用 eager extension 方法消除循环:

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)

解决方案 3:修改上述内容以消除循环和辅助方法:

Enumerable.Range(0, 50).DoWhile(i=> 
{ 
    switch(CheckStatus(i))
    {
        case 1 : return true;
        default: return false;
    }
});

关于c# - Break inside switch 无法终止 FOR 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7352212/

相关文章:

c# - 在 C# 中使用 RAII 安全吗?和其他垃圾收集语言?

javascript - 在 React useState 中使用(或 ||)语法进行赋值

Objective-C:@interface 之前的@class 指令?

javascript - 在 Javascript 开关语句上设置 Cookie

c# - 如何在同一案例中添加多个值

c# - 替换C#中所有目录和文件的名称

c# - 如何跳过 Foreach 中的记录

c# - Entity Framework : Updating a field to a null value?

ruby - 什么是带上下文的 Ruby 方法定义?

c - 切换大量 case 与单个 if