欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 10個常用特性匯總

 更新時間:2020年07月09日 15:45:01   作者:一傻小沖  
這篇文章主要介紹了C# 10個常用特性,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

1) async / await

使用 async / await 模式,可以在執(zhí)行代碼塊操作的時候不會阻塞 UI 或者當(dāng)前的線程。即使該操作被某些執(zhí)行動作延遲了(比如一個 web 請求),async / await 模式也會繼續(xù)執(zhí)行后續(xù)的代碼。

微軟文檔:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx

2) 對象 / 數(shù)組 / 集合的初始值設(shè)定項(initializers)

通過使用對象、數(shù)組、集合的初始值設(shè)定項,可以很容易地創(chuàng)建類、數(shù)組和集合的實例:

// 示例類

public class Employee {

  public string Name {get; set;}

  public DateTime StartDate {get; set;}

}

// 使用初始值設(shè)定項創(chuàng)建員工實例

Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()};

上述示例中的代碼在單元測試中可能非常有幫助,不過在有些情況下也應(yīng)該避免使用它,比如應(yīng)該通過構(gòu)造函數(shù)來進行類的實例化的時候。

微軟文檔:https://msdn.microsoft.com/zh-cn/library/bb384062.aspx

3) Lambda 表達式、謂詞委托(predicates)、委托(delegates)和閉包(closures)

4) ?? – null 合并運算符(Null coalescing operator)

當(dāng)表達式左側(cè)不為 null 的時候,?? 運算符返回其左側(cè)的值,否則返回其右側(cè)的值:

// 可能是 null

var someValue = service.GetValue();

var defaultValue = 23

// 如果 someValue 是 null 的話,result 為 23

var result = someValue ?? defaultValue;

?? 運算符可以用于鏈式操作:

string anybody = parm1 ?? localDefault ?? globalDefault;

它也可以將可空類型轉(zhuǎn)換為非可空類型:

var totalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);

文檔:https://msdn.microsoft.com/zh-cn/library/ms173224.aspx

5) $”{x}” – 內(nèi)插字符串(String Interpolation)- C# 6

C# 6 的一個新特性,可以通過更加高效和優(yōu)雅的方式來進行字符串拼接:

// 傳統(tǒng)方式

var someString = String.Format("Some data: {0}, some more data: {1}", someVariable, someOtherVariable);

// 新的方式

var someString = $"Some data: {someVariable}, some more data: {someOtherVariable}";

也可以在大括號中寫 C# 表達式,這讓它變得非常強大。

6) ?. – null 條件運算符(Null-conditional operator) – C# 6

null 條件運算符使用起來如下所示:

// 如果 customer 或 customer.profile 或 customer.profile.age 為 null 的話,結(jié)果都是 null

var currentAge = customer?.profile?.age;

不再會發(fā)生 NullReferenceExceptions 了!

文檔:https://msdn.microsoft.com/zh-cn/library/dn986595.aspx

7) nameof 表達式 – C# 6

新的 nameof 表達式可能看上去沒那么重要,不過它確實也有其用武之地。在使用自動重構(gòu)工具(比如 Resharper)時,你可能會需要通過參數(shù)的名字來表示它:

public void PrintUserName(User currentUser)

{

  // 在重命名 currentUser 的時候,重構(gòu)工具可能會遺漏在文本中的這個變量名

  if(currentUser == null)

    _logger.Error("Argument currentUser is not provided");

  //...

}

現(xiàn)在你可以這樣來寫:

public void PrintUserName(User currentUser)

{

  // 重構(gòu)工具不會漏掉這個

  if(currentUser == null)

    _logger.Error($"Argument {nameof(currentUser)} is not provided");

  //...

}

文檔:https://msdn.microsoft.com/zh-cn/library/dn986596.aspx

8) 屬性初始值設(shè)定項 – C# 6

你可以通過屬性初始值設(shè)定項,在聲明一個屬性的時候指定一個初始值:

public class User

{ 

  public Guid Id { get; } = Guid.NewGuid(); 

  // ...

}

使用屬性初始

使用屬性初始值設(shè)定項的一個好處,就是你不必聲明一個 setter 方法,從而使得該屬性成為不可變的(immutable)。屬性初始值設(shè)定項可以和 C# 6 的主構(gòu)造函數(shù)(Primary Constructor)語法配合使用。(譯者注:Primary Constructor 語法可以讓你在定義一個類的同時,在類名之后立即指定一個帶參數(shù)的構(gòu)造函數(shù))

9) as / is 運算符

is 運算符用來判斷一個實例是否是特定類型的,比如你想看一下類型轉(zhuǎn)換是否是可行的:

if (Person is Adult)

{

  //do stuff

}

as 運算符會試圖將某個對象轉(zhuǎn)換為某個特定類的實例。如果無法轉(zhuǎn)換的話會返回 null:

SomeType y = x as SomeType;

if (y != null)

{

  //do stuff

}

10) yield 關(guān)鍵字

你可以通過 yield 關(guān)鍵字來返回 IEnumerable 接口的數(shù)據(jù)項。下面的示例會返回 2 的次方(比如直到 8 次方:2、4、8、16、32、64、128、256):

public static IEnumerable<int> Power(int number, int exponent)

{

  int result = 1;

  for (int i = 0; i < exponent; i++)

  {

   result = result * number;

   yield return result;

  }

}

如果使用得當(dāng)?shù)脑挘瑈ield 會變得非常強大。它使得你延遲生成序列中的對象,比如當(dāng)系統(tǒng)不需要枚舉整個集合的時候,可以按需停止。

以上就是C# 10個常用特性匯總的詳細內(nèi)容,更多關(guān)于C# 常用特性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論