a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

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

2020-01-24 03:44:45
字體:
來源:轉載
供稿:網友

1. 經過簡化的Property
早些時候我們這樣聲明Property

復制代碼 代碼如下:

private string _myName;
public string MyName
{
get { return _myName; }
set { _myName = value; }
}

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

public string MyName { get; set; }

當然他不會犧牲靈活性,我們可以單獨給get或者set設定訪問限制符,例如
復制代碼 代碼如下:
public string MyName { get; protected internal set; }

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

class MyClass
{
public delegate void DoSomething(int a);
//定義方法委托
private void DoIt(int a) {
Console.WriteLine(a);
}
private void HowtoDo(DoSomething doMethod,int a) {
doMethod(a);
}
public static void Main(string[] args) {
MyClass mc = new MyClass();
//調用定義的方法委托
mc.HowtoDo(new DoSomething(mc.DoIt), 10);
int x = 10;
//使用匿名委托
mc.HowtoDo(delegate(int a){
Console.WriteLine(a + x);
},10);
//使用lamda表達式
mc.HowtoDo(a=>Console.WriteLine(a+x),10);
Console.ReadLine();
}
}

3. 集合類的聲明
之前我們聲明一個List并給list賦初始值,必須得這么寫:
List<string> list = new List<string>();
list.Add("a一");
list.Add("b二");
list.Add("c三");
現在不需要了,直接寫就可以了
List<string> list = new List<string> {
"def","OK"
};
4. 集合類各個項的操作
我們為了逐個處理集合中的項,需要這么寫:
foreach (string item in list)
{
Console.WriteLine(item);
}
現在不需要了,這樣就可以了
list.ForEach(a => Console.WriteLine(a));
代碼是不是清爽了很多。
5. using == try finally
為了在使用完畢時釋放資源,我們經常要用using,using實質上就是try fiannaly的一個語法糖而已。例如
StreamWriter sw = null;
try
{
sw = new StreamWriter("d:/abc.txt");
sw.WriteLine("test");
}
finally {
if(sw!= null) sw.Dispose();
}
上面的代碼可以簡化為:
using (var sw = new StreamWriter("d:/abc.txt")) {
sw.WriteLine("test");
}
6. 可愛的var
var的意義時不必寫聲明的類型,編譯器會根據后面對var的賦值判斷它的類型,var的類型一旦確認就不能再改變,它只能作為局部變量使用,不能用做字段也不能用做參數聲明。
例如:
var writer = new StreamWriter(path);
for(var i=0;i<100;i++){}
7. 問號的演變
老掉牙的一個問號+冒號
var b = 3;
var a = b > 9?b.ToString():"0"+b;
新寶寶兩個問號 ??,它表示左邊的變量如果為null則值為右邊的變量,否則就是左邊的變量值
string a = null;
var b = a??"";
8. 類型實例化的語法糖
public class Abc
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
我們沒有為上面的類聲明構造函數,但是我們可以像下面的形式來實例化它
public static void Main(string[] args) {
var abc = new Abc{
ID=1,
Name="jb51",
Url="http://jb51.VeVB.COm/"
};
}
9. 傳說中的擴展方法
在c#3.5時引入了擴展方法,我們可以在不修改類源碼的情況下給類增加實例方法,這個很有意義。它的實質也是一種語法糖的實現
例如我們給String類擴展一個IsNumber的方法:
view sourceprint?01 public static class StringExt {
static private Regex regexNumber = new Regex("http://d+");
static public bool IsNumber(this string input)
{
if (string.IsNullOrEmpty(input))
{
return false;
}
return regexNumber.IsMatch(input);
}
}
我們可以在String實例上調用這個方法了
var abc = “123";
var isNumber = abs.IsNumber();
10.使用匿名類
復制代碼 代碼如下:

var a = new {
ID = 1,Name="jb51",BlogUrl="http://www.5lwq4hdr.cn/jb51/"
};

匿名類在linq to sql或者entity framework中返回查詢數據時很好用。
如果大家還有更多的語法糖,歡迎分享。同時希望大家享受語法糖,因為他可以給我們帶來方便,請不要對它嗤之以鼻,也沒必要對它嗤之以鼻。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品1区2区 | 九色社区| 一区二区免费看 | 亚洲涩涩爱 | 高清av网站 | 丰满少妇久久久久久久 | 欧美怡红院视频一区二区三区 | 国产精品久久久久蜜臀 | 欧美理论在线观看 | 欧美八区 | 在线小视频 | 国产精品视频 – 无名网 | 久草毛片| 青青草视频播放 | 不卡一区 | 日韩亚洲一区二区 | 91精品国产综合久久久久久丝袜 | 中文在线视频 | 丁香久久 | 国产精品久久久久影院色老大 | 在线观看亚洲 | 中文字幕日韩高清 | 九九久久久 | 成人一区二区在线播放 | 精品国产一区二区在线 | 日本久久久久久 | 2019天天干 | 欧美精品一区二区视频 | 高清色| 中国国产一级毛片 | а_天堂中文最新版地址 | 在线播放一区 | 第一色视频 | 亚洲国产在| 91视频国内| 国产在线精品一区二区三区 | 影音先锋在线看片资源 | 一本一道久久a久久精品综合蜜臀 | 欧美一级做a爰片免费视频 在线不卡日韩 | 欧美成人性生活视频 | 午夜视频网址 |