2017-02-25 43 views
1

我在做什麼現在:是否有可能:在1行代碼內,如果(index> list.Count)增加索引1並回繞爲0?

index++; 
index %= list.Count; 

我想將它們合併到一個快速線,是這樣的:

++index %= list.Count; 

但是,編譯器不會讓我。

我很想知道:

  1. 是否有可能合併這2進1快,易於讀取行?
  2. 解釋爲什麼我在做什麼不工作,IIRC我用來做在C所有的時間/ C++

感謝您的時間!

+0

或者你可以完全避免模運算(儘管這不可能在運行時產生可測量的差異):if( ++ index == list.Count)index = 0;' –

回答

10

我會是略微如果第一個版本在C或C++中工作,但它經常令我感到驚訝。它在C#中不起作用的原因是%=運算符的左側必須是變量,並且表達式++index未被分類爲變量 - 這是的值

儘管如此,我不會稱之爲「易讀」行。什麼非常易於理解是這樣的:

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

無需複合賦值運算符的。

4

我認爲你需要這樣的:

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

這第一個增量索引,然後執行模量,總是與你的列表中選擇有效指數結束了。

關於您的是否有可能將這2個合併爲一個快速易讀的行?,最短的代碼並不總是最好的可讀代碼。我認爲上述內容足夠明確,不會太長。我認爲最好的選擇。 (這將是最短的選項index = ++index % list.Count;,但設置索引的用法是兩次?)

相關問題