前言

對於許多開發人員而言,進行序列的操作可能是一個常遇到需求。雖然不困難,但容易出錯 。舉例來說,像是取得序列倒數第二個元素、或取得特定序列範圍,在撰寫程式時並沒有這麼直覺,需要加入些思考與驗證,才能確保取得正確資料且不發生錯誤。

在C# 8.0 推出新的索引與範圍與法,讓開發人員可以更直覺地對於序列進行操作。本篇文章若有錯誤或任何建議,請各位先進不吝提出,謝謝。




介紹

C# 8.0 新功能:提供更簡潔的語法,用於序列內的單一元素或範圍資料進行操作。新語法包含兩個新的類型和兩個新的運算子:
System.Index:從序列尾端進行操作的運算子 ^ ,用於指定相對於序列結尾的索引
System.Range: 範圍運算子 ..,指定序列範圍的開始和結束

下圖是一個長度為 8 的序列呈現,第一個元素 index 為 0,最後一個元素 index 為 7。容易理解也相當基礎。




如前面提到,在 C# 8.0 中提供了運算子 ^,讓您可以對於序列進行尾端操作。以下圖為例, ^1 表示序列最後一個元素,而 ^8 表示序列第一個元素。比較特別的是,有別於正向操作, ^0 會超出序列長度,倘若對於 ^0 進行操作則會發生錯誤。




下圖簡單表示以 ^ 作為索引時序列呈現




透過 .. 運算子,你可以取得序列內特定範圍資料。如下圖為例,Sequence[2..5] 表示取得 index 2 到 4 的資料。理所當然,你也能將運算子 ^ 與 .. 一起使用,Sequence [2..^3] 所取得的範圍與 Sequence [2..5] 是相同的,透過下方圖片您能更清楚瞭解其範圍。




比較快一些的記憶方法,範圍包含頭,但不包含尾:




 另一個使用方法是不指定尾巴的 index,如下圖為例,會取得 index 2 (包含),後所有元素。



新的語法:範圍與索引算是在 C# 8.0 中我相當喜愛的語法,能大幅增加程式的可讀性,也讓序列操作出錯的機會降至更低。


參考資料

1. C# 8.0 的新功能 - Microsoft Docs