欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#6.0中10大新特性的應用和總結

 更新時間:2016年03月26日 12:01:33   作者:浮云也是種寂寞  
微軟發(fā)布C#6.0、VS2015等系列產(chǎn)品也有一段時間了,但是網(wǎng)上的教程卻不多,這里真對C#6.0給大家做了一些示例,分享給大家。

微軟于2015年7月21日發(fā)布了Visual Studio 2015, .NET 2015, .NET Framework 4.6, ASP.NET 4.6, Azure SDK 2.7 for .NET, C# 6.0, F# 4.0, TypeScript 1.5, Visual Studio Android 模擬器 等重量級開發(fā)產(chǎn)品。

由于項目升級到了.NetFramework 4.6.1,開發(fā)工具轉向了VS2015,趁機嘗試下C#6.0。結果網(wǎng)上的教程不進人意,許久都沒有更新,只好自己做一下總結。

1.自動屬性初始化(Auto-property initializers)

復制代碼 代碼如下:
public class Account
{
 
    public string Name { get; set; } = "summit";
 
    public int Age { get; set; } = 22;
 
    public IList<int> AgeList
    {
        get;
        set;
    } = new List<int> { 10,20,30,40,50 };
 
}

對于只讀屬性也可以這樣直接初始化(C#5.0不支持),也可以直接在構造函數(shù)里初始化

復制代碼 代碼如下:
public class Customer
{
    public string Name { get; }
    public Customer(string first, string last)
    {
        Name = first + " " + last;
    }
}

2.字符串嵌入值(String interpolation)

在之前版本的String.Format中有多少個參數(shù)就要寫多少個占位符還必須按照順序,否則就報錯.參數(shù)一多,這樣搞的話確實頭疼.新版本中在字符串前用$來標識后邊的字符可以使用{對象}來作為占位符.看個例子.

復制代碼 代碼如下:
Console.WriteLine($"年齡:{account.Age}  生日:{account.BirthDay.ToString("yyyy-MM-dd")}");
Console.WriteLine($"年齡:{account.Age}");
Console.WriteLine($"{(account.Age<=22?"小鮮肉":"老鮮肉")}");

如果想輸出{或}符號,寫兩個即可,如$"{{".
注意這個$符號,網(wǎng)上的N多教程都是沒有這個東東的.是直接"\{ account.Age \}",這種方式在新版本里已經(jīng)被拋棄了.

3.導入靜態(tài)類(Using Static)

像之前使用Math這個靜態(tài)類的時候要先導入System命名空間后才能使用它.現(xiàn)在可以直接導入這個靜態(tài),然后代碼中直接使用其函數(shù).

復制代碼 代碼如下:
using static System.Math;//注意這里不是命名空間哦
 
Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");
Console.WriteLine($"導入后可直接使用方法: {Pow(4,2)}");

注意這里是using static ...
如果某個命名空間下有n個方法,用這種方式直接引入單個靜態(tài)類而不用引用所有方法還是挺方便的.

4.空值運算符(Null-conditional operators)

之前寫過無數(shù)個這樣的判斷代碼

復制代碼 代碼如下:
if (*** != null)
{
     //不為null的操作
}
return null;

現(xiàn)在使用可以簡化這樣方式.

復制代碼 代碼如下:
var age = account.AgeList?[0].ToString();
 
Console.WriteLine("{0}", (person.list?.Count ?? 0));

如果account.AgeList為空則整個表達式返回空,否則后邊的表達式的值.

5.對象初始化器(Index Initializers)

這種方式可以給字典或其他對象通過索引賦值初始化.

復制代碼 代碼如下:
IDictionary<int, string> dict = new Dictionary<int, string>() {
       [1]="first",
       [2]="second"
};
foreach(var dic in dict)
{
    Console.WriteLine($"key: {dic.Key} value:{dic.Value}");
}

output:
key: 1 value:first
key: 2 value:second

6.異常過濾器(Exception filters)

復制代碼 代碼如下:
private static bool Log(Exception e)
{
    Console.WriteLine("log");
    return true;
}
static void TestExceptionFilter()
{
    try
    {
        Int32.Parse("s");
    }
    catch (Exception e) when (Log(e))
    {
        Console.WriteLine("catch");
        return;
    }
}

當when()里面返回的值不為true,將持續(xù)拋出異常,不會執(zhí)行catch里面的方法.

7.nameof表達式 (nameof expressions)

在對方法參數(shù)進行檢查時經(jīng)常這樣寫:

復制代碼 代碼如下:
private static void Add(Account account)
{
     if (account == null)
         throw new ArgumentNullException("account");
}

如果某天參數(shù)的名字被修改了,下面的字符串很容易漏掉忘記修改.
使用nameof表達式后,編譯的時候編譯器將檢查到有修改后自動導航與重構(-_-! 不知道翻譯的對不對)

復制代碼 代碼如下:
private static void Add(Account account)
{
     if (account == null)
         throw new ArgumentNullException(nameof(account));
}

8.在cath和finally語句塊里使用await(Await in catch and finally blocks)

c#5.0里是不支持這么寫.

復制代碼 代碼如下:
Resource res = null;
try
{
    res = await Resource.OpenAsync(…);       // You could do this.
    …
}
catch(ResourceException e)
{
    await Resource.LogAsync(res, e);         // Now you can do this …
}
finally
{
    if (res != null) await res.CloseAsync(); // … and this.
}

9.在屬性里使用Lambda表達式(Expression bodies on property-like function members)

復制代碼 代碼如下:
public string Name =>string.Format("姓名: {0}", "summit");
 
public void Print() => Console.WriteLine(Name);

10.在方法成員上使用Lambda表達式

復制代碼 代碼如下:
static int LambdaFunc(int x, int y) => x*y;
 
public void Print() => Console.WriteLine(First + " " + Last);

關于C#6.0新增加的語言特性目前為止也就這么多.沒有什么新功能,更多的是語法糖的改進.開發(fā)更舒服更快速. 

相關文章

  • C#使用itextsharp生成PDF文件的實現(xiàn)代碼

    C#使用itextsharp生成PDF文件的實現(xiàn)代碼

    以下是對在C#中使用itextsharp生成PDF文件的實現(xiàn)代碼進行了詳細分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • C#文件后綴名的詳細介紹

    C#文件后綴名的詳細介紹

    這篇文章詳細介紹了C#文件后綴名,有需要的朋友可以參考一下
    2013-09-09
  • 解析c# yield關鍵字

    解析c# yield關鍵字

    這篇文章主要介紹了c# yield關鍵字的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • C#二維數(shù)組與多維數(shù)組的具體使用

    C#二維數(shù)組與多維數(shù)組的具體使用

    本文主要介紹了C#二維數(shù)組與多維數(shù)組的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • C#正則表達式與HashTable詳解

    C#正則表達式與HashTable詳解

    這篇文章主要介紹了C#正則表達式與HashTable詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • C#如何連接使用Zookeeper

    C#如何連接使用Zookeeper

    Zookeeper作為分布式的服務框架,雖然是java寫的,但是強大的C#也可以連接使用。而現(xiàn)在主要有兩個插件可供使用,分別是ZooKeeperNetEx和Zookeeper.Net,個人推薦使用ZooKeeperNetEx做開發(fā),本文也已介紹ZooKeeperNetEx為主
    2021-06-06
  • C# 大小寫轉換(金額)實例代碼

    C# 大小寫轉換(金額)實例代碼

    C# 大小寫轉換(金額)實例代碼,需要的朋友可以參考一下
    2013-03-03
  • C#各種正則表達式驗證方法整理大全

    C#各種正則表達式驗證方法整理大全

    許多編程語言和工具都包含對正則表達式的支持,C#也不例外,這篇文章主要給大家介紹了關于C#各種正則表達式驗證方法整理大全的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • C#多線程處理多個隊列數(shù)據(jù)的方法

    C#多線程處理多個隊列數(shù)據(jù)的方法

    這篇文章主要介紹了C#多線程處理多個隊列數(shù)據(jù)的方法,涉及C#線程與隊列的相關操作技巧,需要的朋友可以參考下
    2015-07-07
  • 解決C#獲取鼠標相對當前窗口坐標的實現(xiàn)方法

    解決C#獲取鼠標相對當前窗口坐標的實現(xiàn)方法

    本篇文章是對在C#中獲取鼠標相對當前窗口坐標的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論