前言
前幾天看一個朋友的部落格時,看他用到了C#6的特性,而6出來這麼長時間還沒有正兒八經看過它,今兒專門看了下新特性,說白了也不過是語法糖而已。但是用起來確實能讓你的程式碼更加乾淨些。Let’s try it.
1、集合初始化器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//老語法,一個類想要初始化幾個私有屬性,那就得在建構函式上下功夫。 public class Post { public DateTime DateCreated { get; private set; } public List<Comment> Comments { get; private set; } public Post() { DateCreated = DateTime.Now; Comments = new List<Comment>(); } } public class Comment { } //用新特性,我們可以這樣初始化私有屬性,而不用再建立建構函式 public class Post { public DateTime DateCreated { get; private set; } = DateTime.Now; public List<Comment> Comments { get; private set; } = new List<Comment>(); } public class Comment { } |
2、字典初始化器
這個我倒是沒發現有多麼精簡
1 2 3 4 5 6 7 8 9 10 11 12 |
var dictionary = new Dictionarystring, string> { { "key1","value1"}, { "key2","value2"} }; //新特性 var dictionary1 = new Dictionarystring, string> { ["key1"]="value1", ["key2"]="value2" }; |
3、string.Format
經常拼接字串的對這個方法肯定不模式了,要麼是string.Format,要麼就是StringBuilder了。這也是我最新喜歡的一個新特性了。
1 2 3 4 5 6 7 8 9 10 |
Post post = new Post(); post.Title = "Title"; post.Content = "Content"; //通常情況下我們都這麼寫 string t1= string.Format("{0}_{1}", post.Title, post.Content); //C#6裡我們可以這麼寫,後臺引入了$,而且支援智慧提示。 string t2 = $"{post.Title}_{post.Content}"; |
4、空判斷
空判斷我們也經常,C#6新特性也讓新特性的程式碼更見簡便
1 2 3 4 5 6 7 8 9 10 11 |
//老的語法,簡單卻繁瑣。我就覺得很繁瑣 Post post = null; string title = ""; if (post != null) { title = post.Title; } //C#6新特性一句程式碼搞定空判斷 title = post?.Title; |
空集合判斷,這種場景我們在工作當中實在見的太多,從資料庫中取出來的集合,空判斷、空集合判斷都會遇到。
1 2 3 4 5 6 7 8 9 10 |
Post post = null; List posts = null; if (posts != null) { post = posts[0]; } //新特性,我們也是一句程式碼搞定。是不是很爽? post = posts?[0]; |
5、getter-only 初始化器
這個我倒沒覺得是新特性,官方給出的解釋是當我們要建立一個只讀自動屬性時我們會這樣定義如下
1 2 3 4 5 6 7 8 9 10 11 |
public class Post { public int Votes{get;private set;} } //新特性用這種方式 public class Post { public int Votes{get;} } |
6、方法體表示式化
英語是Expression Bodied Members。其實我覺的也就是Lambda的延伸,也算不上新特性。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Post { public int AddOld() { return 1 + 1; } //新特性還是用Lambda的語法而已 public int AddNew() => 1+1; } |
7、用static using來引用靜態類的方法
我完全沒搞明白這個特性設計意圖在哪裡,本來靜態方法直接呼叫一眼就能看出來哪個類的那個方法,現在讓你用using static XXX引入類。然後直接呼叫其方法, 那程式碼不是自己寫的,一眼還看不出這個方法隸屬那個類。
總結
其中的string插值和空判斷是我最喜歡的特性了,當然收集的可能不全,歡迎補充。 同時我很期待微軟好好把ASP.NET Core開發下。做點對.net負責的產品。