日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 中 System.Range 结构体

發布時間:2023/12/4 C# 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 中 System.Range 结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

翻譯自 John Demetriou 2020年4月6日 的文章?《C# 8 Is Introducing Ranges》

我們之前討論過的 C# 中的一個特性?System.Index 結構體,與另一特性?System.Range 結構體?是攜手并進的。

在 C# 8.0 之前,沒有訪問集合中任意部分的范圍或切片的語法。開發人員通常不得不執行一些自定義的切片操作,或者依靠諸如?array.Skip(5).Take(2);?的 LINQ 方法。

現在 C# 添加了一個新的小特性,它可以幫助人們從一個大的數組項目中獲取一個小范圍的項目。

讓我們來考慮一下。假設我們有一個項目數組,我們僅需展示其中的一部分。通常情況下,我們只需要循環這部分,然后像下面這樣輸出它們。

var array = new string[]{"Item0","Item1","Item2","Item3","Item4","Item5","Item6","Item7","Item8","Item9"};for (int i = 1; i <= 5; i++) {Console.WriteLine(array[i]); }

因此當我們僅需要幾個特定的項,我們通過控制索引值來獲取它們。

通過使用范圍(Range),我們可以用以下方式來替換:

var array = new string[]{"Item0","Item1","Item2","Item3","Item4","Item5","Item6","Item7","Item8","Item9"};foreach (var item in array[1..5]) {Console.WriteLine(item); }

在這里,第一次使用的人會注意到一個奇怪的情況——它只會打印四項。為什么呢?這是因為范圍(Range)包含開始,但不包含末尾
如果想要與上面的?for?循環有相同的結果,我們的?foreach?循環應該是:

foreach (var item in array[1..6]) {Console.WriteLine(item); }

Range 的一些示例

1、從索引 1(包含) 到末尾(包含)

foreach (var item in array[1..]) {Console.WriteLine(item); }

2、從開始(包含)到索引 3(不包含)

foreach (var item in array[..3]) {Console.WriteLine(item); }

3、結合以上兩種,您可以得到一個語法上正確的以下版本

foreach (var item in array[..]) {Console.WriteLine(item); }

它的意思是獲取整個范圍。

譯者注
它也等同于下面兩種寫法:

foreach (var item in array[0..^0]) {Console.WriteLine(item); } foreach (var item in array[0..array.Length]) {Console.WriteLine(item); }

4、從索引 1(包含)到?從末尾開始的索引 1(不包含)

foreach (var item in array[1..^1]) {Console.WriteLine(item); }

在這里,它結合了前面文章中介紹的?Index?的 Hat 運算符(^)。

一個快速的解釋,Hat 運算符(^),會給您一個特定的索引。如果您寫?^1,也就是在請求最后一項的索引。如上所述,考慮到最后一個索引號是排除的,在一個有 10 項的序列中,請求索引項直到?^1,您也就是在請求索引項直到索引 9(索引從 0 開始),并且該項不包括在其中。
我希望我講清楚了。

將范圍作為變量

我們前面所做的是,將范圍(Range)作為類型傳遞。我們也可以將范圍聲明為一個變量:

Range range = 1..9;

然后,可以在?[?和?]?字符中使用該范圍:

var subarray = array[range];

我們還可以將其作為方法的參數傳遞、將其存儲為私有變量,或者用在任何業務邏輯所需的地方。

范圍的類型支持

范圍(Range)不能被用在?List?或者?IEnumerable<Τ>,但數組并不是唯一支持它的類型。

您還可以將索引(Index)和范圍(Range) 與?String、Span<T>?或?ReadOnlySpan<T>?一起使用。

與字符串一起使用的例子基本上就是代替?Substring?方法,如下所示:

string s = "01234567"; string r = s[1..3]; // r 將會是 "12"

對于每個擔心?List(它可能是您通常用來替代數組的類型)不支持范圍的人來說,List?從 .Net Framework 2.0 開始就已經有?GetRange?方法了。


以下為譯者補充

索引和范圍總結

索引(Index)和范圍(Range)為訪問序列中的單個元素或范圍提供了簡潔的語法。

對索引和范圍的語言支持依賴于兩個新類型和兩個新運算符:

  • System.Index?類型表示一個序列索引。

  • Hat 運算符(^),指定一個索引與序列末尾相關,用于構造?System.Index?對象。

  • System.Range?類型表示序列的子范圍。

  • 范圍運算符?..,用于指定范圍的開始和末尾,就像操作數一樣,用于構造?System.Range?對象。

考慮數組?sequence,?0?索引與?sequence[0]?相同。?^0?索引與?sequence[sequence.Length]?相同。請注意,sequence[..^0]?不會引發異常,就像?sequence[..sequence.Length]?一樣。對于任意數字?n,索引?^n?與?sequence.Length - n?相同。如下面代碼中的注釋所示:

string[] words = new string[] {// index from start index from end"The", // 0 ^9"quick", // 1 ^8"brown", // 2 ^7"fox", // 3 ^6"jumped", // 4 ^5"over", // 5 ^4"the", // 6 ^3"lazy", // 7 ^2"dog" // 8 ^1 }; // 9 (or words.Length) ^0

一個范圍指定了范圍的“開始”和“末尾”。范圍是左閉右開的,也就是說范圍包含“開始”,不包含“末尾”。范圍?[0..sequence.Length]、[0..^0]和?[..]?都表示整個范圍。

作者 :John Demetriou
譯者 :技術譯民
出品 :技術譯站(https://ITTranslator.cn/)

END

總結

以上是生活随笔為你收集整理的C# 中 System.Range 结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。