您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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#常用特性有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。