将断线替换为 C# 中的另一个等效行

本文关键字:另一个 断线 替换 | 更新日期: 2023-09-27 18:34:44

我需要在不使用goto的情况下用另一行替换中断;行,可能的解决方案是什么?

static void Main(string[] args)
{
    int Max = 100;
    for (int i = 0; i < Max; i++)
    {
       Console.Writeline(i);
        if (i == 50)
            break;
    }
    Console.ReadLine();
}

将断线替换为 C# 中的另一个等效行

i设置为 Max

if (i == 50)
      i = Max;

这将阻止循环运行。它与break不完全相同.由于它将在 if 语句之后执行代码,因此您可能需要使用 continue 跳过它。

既然你在 50 处突破,这基本上是可能达到的最大值(仅使用你发布的代码(,你为什么不简单地将Max设置为 51 而不是 100?结果是一样的!

我真的很喜欢这个愚蠢的面试问题:这有效吗?

static void Main(string[] args)
{
    int Max = 100;
    for (int i = 0; i < Max; i++)
    {
       if(i >= 51)
          continue;
        Console.Writeline(i);
    }
    Console.ReadLine();
}
i = Max;

说明:在 for 循环中操作循环变量 (i( 是完全合法的。在循环结束时,如果 for-chack 的计算结果为 false,则执行 for-chack (i <Max(,则循环终止>

事实上,这两者是等价的:

for(int i=0; i < 3; i++)
{
    DoSomething(i);
}

将由编译器精确转换为:

  i=0;
start:
  if(i<3)
  {
    DoSomething(i);
    i++;
    goto start;
  }

如果您不必保留"if"语句:

static void Main(string[] args)
{
    int Max = 100;
    for (int i = 0; i <= 50; i++) // stop when i > 50 
    {
       Console.WriteLine(i);
    }
    Console.ReadLine();
}

static void Main(string[] args)
{
    int Max = 50;
    for (int i = 0; i <= Max; i++)  // stop when i > Max
    {
       Console.WriteLine(i);
    }
    Console.ReadLine();
}

演示点网小提琴

 if (i == 50)
   return;

这也应该可以解决问题