国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#語法糖(Csharp Syntactic sugar)大匯總

2019-11-17 03:48:01
字體:
來源:轉載
供稿:網友

首先需要聲明的是“語法糖”這個詞絕非貶義詞,它可以給我帶來方便,是一種便捷的寫法,編譯器會幫我們做轉換;而且可以提高開發編碼的效率,在性能上也不會帶來損失。這讓java開發人員羨慕不已,呵呵。

 

1.  經過簡化的PRoperty

早些時候我們這樣聲明Property

view sourceprint?01 private string _myName; 

02   

03 public string MyName 

04   

05 { 

06   

07     get { return _myName; } 

08   

09     set { _myName = value; } 

10   

11 }

千篇一律的這樣聲明,沒有多大意義,于是C#的設計人員將這個千篇一律的工作交給了編譯器幫我們做了,我們現在可以這樣聲明

view sourceprint?1 public string MyName { get; set; }

當然他不會犧牲靈活性,我們可以單獨給get或者set設定訪問限制符,例如

view sourceprint?1 public string MyName { get; protected internal set; }

 

2.  經過兩次變異的委托寫法

在.net 1.1時我們不得不聲明方法后才在委托中使用,在.net 2.0之后我們可以使用匿名委托,他不單可以簡化寫法,還可以在匿名委托中訪問范圍內的變量;再后來拉姆達表達式來了,寫法就更簡便了。

view sourceprint?01 class MyClass 

02 { 

03     public delegate void DoSomething(int a); 

04   

05     //定義方法委托 

06     private void DoIt(int a) { 

07         Console.WriteLine(a); 

08     } 

09   

10     private void HowtoDo(DoSomething doMethod,int a) { 

11         doMethod(a); 

12     } 

13   

14     public static void Main(string[] args) { 

15         MyClass mc = new MyClass(); 

16         //調用定義的方法委托 

17         mc.HowtoDo(new DoSomething(mc.DoIt), 10); 

18         int x = 10; 

19         //使用匿名委托 

20         mc.HowtoDo(delegate(int a){ 

21             Console.WriteLine(a + x); 

22         },10); 

23   

24         //使用lamda表達式 

25         mc.HowtoDo(a=>Console.WriteLine(a+x),10); 

26   

27         Console.ReadLine(); 

28     } 

29 }

3.  集合類的聲明

之前我們聲明一個List并給list賦初始值,必須得這么寫:

view sourceprint?1 List<string> list = new List<string>(); 

2 list.Add("a一"); 

3 list.Add("b二"); 

4 list.Add("c三");

現在不需要了,直接寫就可以了

view sourceprint?1 List<string> list = new List<string> { 

2             "def","OK"

3 };

 

4.  集合類各個項的操作

我們為了逐個處理集合中的項,需要這么寫:

view sourceprint?1 foreach (string item in list) 

2 { 

3      Console.WriteLine(item); 

4 }

現在不需要了,這樣就可以了

view sourceprint?1 list.ForEach(a => Console.WriteLine(a));

代碼是不是清爽了很多。

 

5.  using == try finally

為了在使用完畢時釋放資源,我們經常要用using,using實質上就是try fiannaly的一個語法糖而已。例如

view sourceprint?1 StreamWriter sw = null; 

2 try

3 { 

4     sw = new StreamWriter("d:/abc.txt"); 

5     sw.WriteLine("test"); 

6 } 

7 finally { 

8     if(sw!= null) sw.Dispose(); 

9 }

上面的代碼可以簡化為:

view sourceprint?1 using (var sw = new StreamWriter("d:/abc.txt")) { 

2     sw.WriteLine("test"); 

3 }

6.  可愛的var

var的意義時不必寫聲明的類型,編譯器會根據后面對var的賦值判斷它的類型,var的類型一旦確認就不能再改變,它只能作為局部變量使用,不能用做字段也不能用做參數聲明。

例如:

view sourceprint?1 var writer = new StreamWriter(path);
view sourceprint?1 for(var i=0;i<100;i++){}

 

7.  問號的演變

老掉牙的一個問號+冒號

view sourceprint?1 var b = 3; 

2 var a = b > 9?b.ToString():”0”+b;

新寶寶兩個問號 ??,它表示左邊的變量如果為null則值為右邊的變量,否則就是左邊的變量值

view sourceprint?1 string a = null; 

2 var b = a??””;

 

8.  類型實例化的語法糖

view sourceprint?1 public class Abc 

2 { 

3     public int ID { get; set; } 

4   

5     public string Name { get; set; } 

6   

7     public string Url { get; set; } 

8 }

我們沒有為上面的類聲明構造函數,但是我們可以像下面的形式來實例化它

view sourceprint?1 public static void Main(string[] args) { 

2         var abc = new Abc{ 

3             ID=1, 

4             Name="yukaizhao", 

5             Url="

6         }; 

7     }

 

9.  傳說中的擴展方法

在c#3.5時引入了擴展方法,我們可以在不修改類源碼的情況下給類增加實例方法,這個很有意義。它的實質也是一種語法糖的實現

例如我們給String類擴展一個IsNumber的方法:

view sourceprint?01 public static class StringExt { 

02     static private Regex regexNumber = new Regex("//d+"); 

03     static public bool IsNumber(this string input) 

04     { 

05         if (string.IsNullOrEmpty(input)) 

06         { 

07             return false; 

08         } 

09         return regexNumber.IsMatch(input); 

10     } 

11 }

我們可以在String實例上調用這個方法了

view sourceprint?1 var abc = “123”; 

2 var isNumber = abs.IsNumber();

 

10.使用匿名類

view sourceprint?1 var a = new { 

2     ID = 1,Name=”yukaizhao”,BlogUrl=”http://m.survivalescaperooms.com/yukaizhao/” 

3 };

匿名類在linq to sql或者entity framework中返回查詢數據時很好用。

如果大家還有更多的語法糖,歡迎分享。同時希望大家享受語法糖,因為他可以給我們帶來方便,請不要對它嗤之以鼻,也沒必要對它嗤之以鼻。

http://m.survivalescaperooms.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巩留县| 清镇市| 孝感市| 育儿| 民权县| 巫山县| 洪泽县| 东光县| 县级市| 大名县| 汤原县| 郯城县| 连平县| 贵阳市| 淮滨县| 旺苍县| 太湖县| 开鲁县| 青铜峡市| 若羌县| 德惠市| 虞城县| 望谟县| 武穴市| 新昌县| 元阳县| 呈贡县| 堆龙德庆县| 金华市| 修武县| 尼玛县| 正镶白旗| 广水市| 肥西县| 宿迁市| 镇原县| 延吉市| 宜黄县| 凤凰县| 宝丰县| 阆中市|