C#6.0新文法

來源:互聯網
上載者:User

標籤:sum   console   自動   名稱   架構   print   str   報錯   過濾器   

一、自動屬性初始化

在以前的C#版本中,屬性是這樣寫的:

1 public int Id { get; set; }2 public string Name { get; set; }

在C#6.0中,屬性可以自動賦初始值,例如:

1 public string Name { get; set; } = "summit";2 public int Age { get; set; } = 22;3 public DateTime BirthDay { get; set; } = DateTime.Now.AddYears(-20);4 public IList<int> AgeList5 {6       get;7       set;8 } = new List<int> { 10, 20, 30, 40, 50 };

 二、匯入靜態類

我們都知道,使用靜態類的方法時是使用類名.方法名的形式,例如:

1 Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");

 這裡的Math是架構內建的靜態類,要使用Pow()方法,必須要向上面的代碼一樣。在C#6.0中可以用下面的方式使用靜態類的方法,例如:

1、使用using匯入靜態類

2、匯入靜態類以後,可以像使用普通方法一樣,直接使用,例如:

1 Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}");2 Console.WriteLine($"匯入後可直接使用方法: {Pow(4, 2)}");

 三、字串嵌入值

在以前版本中,如果要對字串就行格式化,要使用string.Format,例如:

1 Console.WriteLine(string.Format("目前時間:{0}",DateTime.Now.ToString()));

在C#6.0中,可以直接使用$進行字串的嵌入了,例如:

1 Console.WriteLine(string.Format("目前時間:{0}",DateTime.Now.ToString()));2 Console.WriteLine($"年齡:{this.Age}  生日:{this.BirthDay.ToString("yyyy-MM-dd")}");3 Console.WriteLine($"年齡:{{{this.Age}}}  生日:{{{this.BirthDay.ToString("yyyy -MM-dd")}}}");4 Console.WriteLine($"{(this.Age <= 22 ? "小鮮肉" : "老鮮肉")}"); 

結果:

四、空值運算子

我們都知道,null值是不能調用ToString()方法的,會報“未將對象引用設定到對象執行個體”的錯誤,例如: 

1 string name = null;2 Console.WriteLine(name.ToString());

 結果:

在C#6.0中有了空值運算子,如果是null值也可以調用ToString()方法了,這時程式什麼都不會輸出,例如:

1 int? iValue = 10;2 Console.WriteLine(iValue?.ToString());//不需要判斷是否為空白3 string name = null;4 Console.WriteLine(name?.ToString()); // 程式不會報錯,也不會輸出任何值5 Console.WriteLine("空值運算子");

 結果:

這樣就不需要像以前一樣先判斷一下變數是不是null值了。

五、對象初始化器

在前面一篇文章中講過一次C#文法糖,在那裡講過對象初始化器和集合初始化器,以前初始化字典集合要像下面的方式:

 1 IDictionary<int, string> dictOld = new Dictionary<int, string>() 2 { 3         { 1,"first"}, 4         { 2,"second"} 5 }; 6 // 迴圈輸出 7 foreach(KeyValuePair<int,string> keyValue in dictOld) 8 { 9         Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");10 }

結果:

在C#6.0中,可以通過索引的方式給欄位進行初始化,例如:

 1 IDictionary<int, string> dictNew = new Dictionary<int, string>() 2 { 3        [4] = "first", 4        [5] = "second" 5 }; 6 // 迴圈輸出 7 foreach (KeyValuePair<int, string> keyValue in dictNew) 8 { 9         Console.WriteLine($"key:{keyValue.Key},value:{keyValue.Value}");10 }

 結果:

六、異常過濾器

在以前的版本中,捕獲異常通常使用try{}catch(),只要是發生了異常,就會進入到catch裡面,例如:

1 try2 {3         Int32.Parse("we");4 }  5 catch(Exception ex)6 {7         Console.WriteLine(ex);8 }

 結果:

在C#6.0中,可以設定在滿足某種條件的情況下,才能進入異常捕獲,例如:

1 int exceptionValue = 10;2 try3 {4        Int32.Parse("s");5 }6 catch (Exception e) when (exceptionValue > 1)//滿足條件才進入catch7 {8        Console.WriteLine("catch");9 }

 結果:

七、nameof運算式

我們以前使用過typeof,typeof()可以擷取類型,nameof運算式和typeof一樣的,例如:

1 Console.WriteLine(nameof(peopleTest)); //擷取peopleTest這個字串2 Console.WriteLine(nameof(People));3 Console.WriteLine(nameof(CSharpSix));

結果:

應用情境:列印日誌的時候列印出參數的值,如果方法裡面參數的名稱改了,而日誌裡面寫的還是原來參數的名稱,這樣就會導致不一致,使用了nameof可以保證日誌裡面的參數名稱和方法裡面的參數名稱一致。

八、在屬性/方法裡面使用Lambda運算式

1 public string NameFormat => string.Format("姓名: {0}", "summit");2 public void Print() => Console.WriteLine(Name);

在Main()方法裡面調用:

1 CSharpSix six = new CSharpSix();2 Console.WriteLine(six.NameFormat);3 six.Print();

 

結果:

 

C#6.0新文法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.