【问题标题】:Is it possible to: increment index by 1 and wrap back to 0 if(index > list.Count) within 1 line of code?是否可以:在 1 行代码中将 index 增加 1 并返回 0 if(index > list.Count)?
【发布时间】:2017-02-25 17:28:14
【问题描述】:

我现在在做什么:

index++;
index %= list.Count;

我想将它们合并为 1 条快速线,例如:

++index %= list.Count;

但是编译器不允许我这样做。

我很想知道:

  1. 是否可以将这 2 行合并为 1 行快速、易于阅读的行?
  2. 解释为什么我正在做的事情不起作用,IIRC 我曾经在 C/C++ 中一直这样做

感谢您的宝贵时间!

【问题讨论】:

  • 或者您可以完全避免模运算(尽管这不太可能在运行时产生可测量的差异):if (++index == list.Count) index = 0;

标签: c# loops indexing syntax


【解决方案1】:

如果第一个版本在 C 或 C++ 中工作,我会稍微感到惊讶,但它确实经常让我感到惊讶。它在 C# 中不起作用的原因是 %= 运算符的左侧必须是一个变量,而表达式 ++index 没有被归类为变量 - 它是一个 值 em>。

无论如何,我不会称其为“易于阅读”的行。 很容易理解是这样的:

index = (index + 1) % list.Count;

根本不需要复合赋值运算符。

【讨论】:

【解决方案2】:

我认为你需要这个:

index = (index + 1) % list.Count;

这首先增加索引,然后执行模数,总是以列表的有效索引结束。

关于您的是否有可能将这 2 行合并为 1 行快速、易于阅读的行?,最短的代码并不总是最好的可读代码。我认为以上内容已经足够明确并且不会太长。我认为最好的选择。 (这将是最短的选项index = ++index % list.Count;,但是设置索引两次有什么用?)

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多