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。第七個版本增加了一些新特性,並將重點放在...