91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#常用特性有哪些

發布時間:2020-07-10 09:58:52 來源:億速云 閱讀:220 作者:清晨 欄目:開發技術

這篇文章將為大家詳細講解有關C#常用特性有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1) async / await

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

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

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

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

// 示例類

public class Employee {

  public string Name {get; set;}

  public DateTime StartDate {get; set;}

}

// 使用初始值設定項創建員工實例

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

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

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

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

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

當表達式左側不為 null 的時候,?? 運算符返回其左側的值,否則返回其右側的值:

// 可能是 null

var someValue = service.GetValue();

var defaultValue = 23

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

var result = someValue ?? defaultValue;

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

string anybody = parm1 ?? localDefault ?? globalDefault;

它也可以將可空類型轉換為非可空類型:

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

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

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

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

// 傳統方式

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 的話,結果都是 null

var currentAge = customer?.profile?.age;

不再會發生 NullReferenceExceptions 了!

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

7) nameof 表達式 – C# 6

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

public void PrintUserName(User currentUser)

{

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

  if(currentUser == null)

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

  //...

}

現在你可以這樣來寫:

public void PrintUserName(User currentUser)

{

  // 重構工具不會漏掉這個

  if(currentUser == null)

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

  //...

}

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

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

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

public class User

{ 

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

  // ...

}

使用屬性初始

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

9) as / is 運算符

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

if (Person is Adult)

{

  //do stuff

}

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

SomeType y = x as SomeType;

if (y != null)

{

  //do stuff

}

10) yield 關鍵字

你可以通過 yield 關鍵字來返回 IEnumerable 接口的數據項。下面的示例會返回 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;

  }

}

如果使用得當的話,yield 會變得非常強大。它使得你延遲生成序列中的對象,比如當系統不需要枚舉整個集合的時候,可以按需停止。

關于C#常用特性有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余江县| 金秀| 新营市| 江安县| 石景山区| 洛川县| 珲春市| 宁陕县| 临西县| 灵璧县| 江山市| 泰来县| 苗栗县| 澄城县| 娄底市| 汨罗市| 嘉祥县| 林州市| 子长县| 龙川县| 隆林| 那坡县| 壶关县| 玛沁县| 山东省| 棋牌| 四会市| 墨脱县| 韩城市| 扎鲁特旗| 申扎县| 邢台市| 治县。| 盐边县| 西和县| 姜堰市| 麻城市| 什邡市| 临朐县| 平原县| 广灵县|