【问题标题】:For I loop in C# ignore a value of IFor I 在 C# 中循环忽略 I 的值
【发布时间】:2021-05-17 12:43:59
【问题描述】:

我将一个标记存储在一个二维数组网格中,这个标记一次可以移动一个位置。 当令牌移动时,我使用如下所示的 for 循环检查每个位置。

for (int i = 0; i < 9; i++){
    // Do things
}

因为标记的当前位置总是 4,所以我包含了一个 if 语句以避免检查标记的当前位置

for (int i = 0; i < 9; i++){
    if(i != 4){
        // Do things////
    }
}

有没有办法强制循环在声明中自动跳过 i = 4 或者这是忽略它的最佳方法。

【问题讨论】:

  • 无法在 for 循环中自动跳过索引,您已经找到了最佳解决方案。
  • 我更喜欢使用:if (i == 4) continue,因为它可以防止代码嵌套
  • 你可能会感兴趣:stackoverflow.com/a/7942467/3888657
  • @TomasChabada 我认为您可能有最好的建议。如果您将其作为答案,我会为您接受。
  • @Parzavil 好的,我发布了,谢谢

标签: c# for-loop


【解决方案1】:

完全没问题,只有一个建议:我会使用

if (i == 4) continue;

防止代码嵌套

【讨论】:

    【解决方案2】:

    这可能是最好的解决方案,但如果你真的想避免这个if 声明,你可以随时使用foreach

    var iterList = new List<int> { 0, 1, 2, 3, 5, 6, 7, 8 };
    foreach (int element in iterList)
    {
        // use element
    }
    

    但这似乎并不高效且不利于内存。

    【讨论】:

    • 虽然这可能行得通,但它可能会变慢,而且可读性肯定会降低。
    • 如果你走这条路,我更喜欢可读性更强的var iterList = Enumerable.Range(0, 9).Except(new[] { 4 });。在您的示例中,很难看到 4 丢失了。
    【解决方案3】:

    你可以试试这个:

    List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
    foreach (int item in numbers.Where((number, index) => index != 4))
    {
         Console.WriteLine(item);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2022-01-05
      • 2015-07-05
      • 2013-04-26
      • 2011-05-14
      • 1970-01-01
      • 2015-10-05
      相关资源
      最近更新 更多