通過乙個例子感受C 6 0新特性

2022-07-04 06:36:14 字數 4195 閱讀 6317

微軟在visual studio 2015中更新c#語言到6.0,新增了很多很好的特性,以使c#語言繼續躋身於最優秀語言之行列。下面通過乙個例子快速感受一下c# 6.0的新特性,以下程式在vs2015正式版中測試通過。

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

csharp6research813

14public

int b = 1;15

16public

string separator = "/"

;1718public

string separatorspaces = string

.empty;

1920

public

double value => (double)a /b;

2122

public

intthis[int index] => index == 0 ?a : b;

2324

public

intthis[string index] => index == "

a" ?a : b;

2526

public

override

string tostring() => $"";

2728

public

void print() =>console.writeline(tostring());

2930

public

fraction()

3134

35public fraction(int a, int

b)36

4041

public fraction(int a, int b, string separatorspaces) : this

(a, b)

4248}49

50public

static

readonly dictionary commonfractions =

51new dictionary52;

5960}61

62public

struct

fractionstruct

6365

public

int b

66public fractionstruct(int a, int b)

6768

public

override

string tostring() => $"/"

;6970}

7172

class

program

73 : ");

79}8081

var fraction = new fraction(1, 3, "");

82fraction.print();

8384

try85

88catch (argumentnullexception e) when (e.paramname == "

separatorspaces")

8992

93fraction v;

94 fraction.commonfractions.trygetvalue("

harf

", out

v);95 v?.print();

96var a = v?.a;

97 console.writeline(a == null

);98

var b = v?["b"

];99 console.writeline(b == null

);100 console.writeline(v?.tostring() == null

);101

102 console.writeline(new fractionstruct(0, 1

).tostring());

103 console.writeline(default

(fractionstruct).tostring());

104}

105106

}107 }

執行結果如下,

zero : 0

one : 1

half : 0.5

quarter : 0.25

infinity : ∞

1 / 3

separatorspaces can not be null

true

true

true

0/10/0

1. auto-property initializers 自動屬性初始化器

public int b = 1;

可以直接給自動屬性賦值了,不需要寫在建構函式中了。

2. getter-only auto-properties 唯讀自動屬性

public string separatorspaces = string.empty;

唯讀自動屬性可以直接初始化,或者在建構函式中初始化。

3. expression-bodied members 表示式體成員

public double value => (double)a / b;

public int this[int index] => index == 0 ? a : b;

public void print() => console.writeline(tostring());

唯讀屬性,唯讀索引器和方法都可以使用lambda表示式作為body。

4. string interpolation 字串嵌入值

$"";

字串前加$,大括號中的表示式會在執行時計算值,並嵌入到字串中。

5. nameof operator  nameof 運算子

throw new argumentnullexception(nameof(separatorspaces));

nameof會返回變數,引數或成員名。

這個很有用,原來寫wpf中的viewmodel層的屬性變化通知時,需要寫字串,或者使用mvvmlight等庫中的幫助方法,可以傳入獲取屬性的lambda,但由於是在執行時解析,會有少許效能損失。現在好了,使用nameof運算子,既能保證重構安全和可讀性,又能保證效能。

6. dictionary initializer 字典初始化器

new dictionary< string, fraction>

["zero"] = new fraction (),

["one"] = new fraction (1, 1),

["half"] = new fraction (1, 2),

["quarter"] = new fraction (1, 4),

[ "infinity"] = new fraction (1, 0),

現在字典可以用一種可讀性更好的方法進行初始化,方括號包圍的key等於value。

7. exception filters 異常過濾器

catch (argumentnullexception e) when (e.paramname == "separatorspaces")

console.writeline("separatorspaces can not be null");

設定進入catch塊的條件。

8. null propagation 空傳播

v?.a

v?["b"]

v?.tostring()

物件為null時不呼叫屬性,索引器,方法等,表示式返回null,和swift中的用法相似。

9. await in catch/finally catch和finally塊中的await

例子如下,

resource res = null;

trycatch (resourceexception e)

finally

c 6 0新特性(一)

接近年底了,基本上沒什麼活了,就學點新東西,就想著了解下c 6.0的新特性。在code project上看到了一篇不錯的文章,就準備翻譯一下,順便照著學習學習。廢話不多說,直奔主題。眾所周知,c 6.0 是在visual studio 2015中引入的。在其他的幾個版本中同樣引入一些特性,比如在c ...

c 6 0新特性(一)

接近年底了,基本上沒什麼活了,就學點新東西,就想著了解下c 6.0的新特性。在code project上看到了一篇不錯的文章,就準備翻譯一下,順便照著學習學習。廢話不多說,直奔主題。眾所周知,c 6.0 是在visual studio 2015中引入的。在其他的幾個版本中同樣引入一些特性,比如在c ...

乙個例子理解C 位移

來自 很多人覺得位移這東西很複雜,二進位制一堆0 1看不懂。其實很簡單。位移理解可能簡單一些 其實位移就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當於乘8,左移4位相當於...