1. 程式人生 > >c#6 新特性

c#6 新特性

1、集合初始化器

複製程式碼

//老語法,一個類想要初始化幾個私有屬性,那就得在建構函式上下功夫。
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、字典初始化器

    這個我倒是沒發現有多麼精簡

複製程式碼

 var dictionary = new Dictionary<string, string>
  {
       { "key1","value1"},
        { "key2","value2"}
   };

//新特性
 var dictionary1 = new Dictionary<string, string>
  {
         ["key1"]="value1",
         ["key2"]="value2"
  };

複製程式碼

 

3、string.Format

     經常拼接字串的對這個方法肯定不模式了,要麼是string.Format,要麼就是StringBuilder了。這也是我最新喜歡的一個新特性了。

複製程式碼

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新特性也讓新特性的程式碼更見簡便

複製程式碼

//老的語法,簡單卻繁瑣。我就覺得很繁瑣
Post post = null;
string title = "";
if (post != null)
{
      title = post.Title;
}


//C#6新特性一句程式碼搞定空判斷
title = post?.Title;

複製程式碼

 空集合判斷,這種場景我們在工作當中實在見的太多,從資料庫中取出來的集合,空判斷、空集合判斷都會遇到。

複製程式碼

Post post = null;
List<Post> posts = null;

 if (posts != null)
 {
      post = posts[0];
  }

//新特性,我們也是一句程式碼搞定。是不是很爽?
post = posts?[0];

複製程式碼

 

5、getter-only 初始化器

     這個我倒沒覺得是新特性,官方給出的解釋是當我們要建立一個只讀自動屬性時我們會這樣定義如下

複製程式碼

public class Post
{
      public int Votes{get;private set;}
}


//新特性用這種方式
public class Post
{
     public int Votes{get;}
}

複製程式碼

 

6、方法體表達式化

     英語是Expression Bodied Members。其實我覺的也就是Lambda的延伸,也算不上新特性。

複製程式碼

public class Post
 {
        
       public int AddOld()
        {
            return 1 + 1;
        }
 
       //新特性還是用Lambda的語法而已
        public int AddNew() => 1+1;

    }

複製程式碼

 

7、用static using來引用靜態類的方法

     我完全沒搞明白這個特性設計意圖在哪裡,本來靜態方法直接呼叫一眼就能看出來哪個類的那個方法,現在讓你用using static XXX引入類。然後直接呼叫其方法, 那程式碼不是自己寫的,一眼還看不出這個方法隸屬那個類。