C 8中的範圍型別 Range Type

2021-09-08 14:16:20 字數 2329 閱讀 2282

c# 8.0中加入了乙個新的範圍型別(range type)。

這裡我們首先展示一些**,並一步一步為**新增一些不同的東西, 為大家展示一下範圍型別的功能和用法。

我們最原始的**如下:

copy

static void main(string args) ; for(int i=1; i <= 3; i++)  console.readline(); }

這裡我們顯示的定義了我們查詢陣列的索引1-3, 並輸出他們的值。毫無疑問,當我們執行程式之後,**結果如下:

copy

item2

item3

item4

但是,假設我們不想使用for迴圈,而是想要使用這個名為「range」的新特性, 我們可以將**重寫為:

copy

static void main(string args) ; foreach (var item in myarray[1..3])  console.readline(); }

現在我們來執行程式。

copy

item2

item3

結果比我們預想的少了乙個。這是我們使用範圍型別遇到的第乙個問題。

範圍的起始索引是包含的,範圍的結束索引是排除的

如果我們修改一下我們的**:

copy

static void main(string args) ; foreach (var item in myarray[1..4])  console.readline(); }

我們就會獲得預想的結果。

使用範圍來定義起始和結束索引非常的好用。但是如何表示從乙個索引開始直到陣列的最後乙個物件呢?

copy

static void main(string args) ; foreach (var item in myarray[1..])  console.readline(); }

輸出結果:

copy

item2

item3

item4

item5

copy

foreach (var item in myarray[..3])

輸出結果:

copy

item1

item2

item3

copy

foreach (var item in myarray[..])

輸出結果:

copy

item1

item2

item3

item4

item5

c# 8.0提供了^操作符,^操作符表示從陣列末尾計算索引。

copy

foreach (var item in myarray[1..^1]) 

輸出結果:

copy

item2

item3

item4

當我們編寫1..4的時候,看起來就好像我們在使用新的語法,實際上這只是個語法糖,實際上它初始化乙個range類物件,就好像我們可以使用就可以建立乙個陣列一樣。

copy

static void main(string args) ; range range = 1..4; foreach (var item in myarray[range])  console.readline(); }

使用範圍型別的另乙個好處就是你可以使用它替換string.substring方法, 寫起來更加簡單。

copy

console.writeline("123456789"[1..4]);

C 8中的可空引用型別

原文 nullable reference types in c 8 可空引用型別?自從我開始學習.net,引用型別一直就是可空的。然而初級程式設計師通常會告訴你值型別不可空,引用型別可空。事實上,在.net中有一種語法可以表明乙個值型別是否可空。int?nullableint1 null null...

C 中的範圍型別 Range Type

語法糖range static void main string args for int i 1 i 3 i foreach var item in myarray 1.4 foreach var item in myarray 1 foreach var item in myarray 3 fo...

C 8的Ranges和遞迴模式

2015年1月21日是c 歷史上最重要的日子之一。在這一天,c 專家anders hejlsberg和mads torgersen等人聚在一起暢談c 的未來,並思考了這門語言應該往哪個方向發展。2015年1月21日的c 會議紀要。這次會議的第乙個結果是c 7。第七個版本增加了一些新特性,並將重點放在...