C# 7.0 新特性

C# 7.0 也快要發(fā)布了,查看了下new features,感覺(jué)C#也越來(lái)越有點(diǎn)兒動(dòng)態(tài)語(yǔ)言的感覺(jué)了,各種語(yǔ)法糖,用起來(lái)爽歪歪哦。


Tuple(函數(shù)多返回值)

多返回值是C#7.0的一大亮點(diǎn)啊,除了用out parameter現(xiàn)在可以直接返回元組類型,而且是值類型的,并非引用,有點(diǎn)兒Python的感覺(jué)了。

(string, string, string) LookupName(long id) // tuple return type
{ 
    ... // retrieve first, middle and last from data storage 
    return (first, middle, last); // tuple literal
}

可以用Item1,Item2 ... 來(lái)獲取元組的元素,像這樣:

var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");

還可以給元組中的元素起一個(gè)別名:

(string first, string middle, string last) LookupName(long id) // tuple elements have names

var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");

還可以直接在返回出定義新變量:

(string first, string middle, string last) = LookupName(id1); // deconstructing declaration
WriteLine($"found {first} {last}.");

是不是找到了Python的感覺(jué)呢!

Pattern matching(模式匹配)

可以更方便的判斷一個(gè)變量的類型來(lái)進(jìn)行下一步操作。也可以用在case中,非常靈活。

public void PrintStars(object o)
{
    if (o is null) return; // constant pattern "null" 
    if (!(o is int i)) return; // type pattern "int i" 
    WriteLine(new string('*', i));
}

用在switch case中就更方便了:

switch(shape)
{
    case Circle c: 
        WriteLine($"circle with radius {c.Radius}");
        break; 
    case Rectangle s when (s.Length == s.Height): 
        WriteLine($"{s.Length} x {s.Height} square"); 
        break; 
    case Rectangle r: 
         WriteLine($"{r.Length} x {r.Height} rectangle"); 
         break; 
    default: 
         WriteLine("<unknown shape>"); 
         break; 
    case null: 
         throw new ArgumentNullException(nameof(shape));
}

其他的特性

還有一些特性也使得代碼更加簡(jiǎn)潔:

  • out variables
p.GetCoordinates(out int x, out int y); 
WriteLine($"({x}, {y})");
  • local functions(局部方法)

  • 數(shù)字可以加下劃線分開(kāi),如var d = 123_456;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,204評(píng)論 1 10
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語(yǔ)閱讀 4,120評(píng)論 0 6
  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫在分支后用逗號(hào)分開(kāi)。如果任何模式...
    無(wú)灃閱讀 1,568評(píng)論 1 5
  • 有同學(xué)下周翹課去首爾,在朋友圈說(shuō)可代購(gòu),然后我的天吶體內(nèi)的洪荒之力難以控制,刷刷刷寫了好多東西列了不長(zhǎng)不短的單子,...
    Cony_Lv閱讀 259評(píng)論 0 0
  • 我最最心愛(ài)的小寶貝: 當(dāng)媽媽提起筆給寶貝寫這封信的時(shí)候,我腦海里像放電影一般,寶貝成長(zhǎng)的點(diǎn)滴一幕幕的掠過(guò)。媽...
    ANN莫閱讀 1,115評(píng)論 0 0

友情鏈接更多精彩內(nèi)容