C# 8 提供了索引(Indices)與範圍(Ranges),讓我們可以透過簡潔的方式來存取序列中的單一元素或範圍,藉由兩個新的類型(Index, Range)與兩個新的運算子(^, ..)。

  • System.Index 代表序列的索引。
  • ^ 來自 end 運算子(Index from end operator),從序列結尾開始的元素位置。
  • System.Range 代表序列的子範圍。
  • .. 範圍運算子(Range operator ),指定範圍的開始和結束作為其運算元。

透過以下幾個使用例子來說明。

1
2
3
4
5
int[] intArray = {1, 2, 3, 4, 5}; 
Index index = 0;
// intArray[index] = 1
index = ^1;
// intArray[index] = 5

需注意 ^0 與 array 的長度相同,所以會拋出 System.IndexOutOfRangeException 錯誤。

1
2
3
4
5
6
7
int[] intArray = { 1, 2, 3, 4, 5 };
Range range = ..;
// intArray[range] = { 1, 2, 3, 4, 5 }
range = 1..3;
// intArray[range] = { 2, 3 }
range = ^3..^1;
// intArray[range] = { 3, 4 }

.. 運算子的開頭與結尾預設為0^0,需注意在透過 Range 取得子範圍時,是不含結尾位置的

索引與範圍不只能使用在陣列上,詳細可以透過第一個參考連結內的類型支援索引和範圍查看。

參考資料
索引和範圍
成員存取運算子和運算式
C # 8.0 的新功能-c # 指南