C# 中 10 個你真的應該學習(和使用!)的功能
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
如果你開始探索C#或決定擴充套件你的知識,那麼你應該學習這些有用的語言功能,這樣做有助於簡化程式碼,避免錯誤,節省大量的時間。
1)async / await
使用async / await-pattern允許在執行阻塞操作時解除UI /當前執行緒的阻塞。async / await-pattern的工作原理是讓程式碼繼續執行,即使在某些東西阻塞了執行(如Web請求)的情況下。
閱讀更多有關async / await-pattern的資訊,請訪問:https://msdn
2)物件/陣列/集合初始化器
通過使用物件、陣列和集合初始化器,可以輕鬆地建立類、陣列和集合的例項:
//一些演示類 public class Employee { public string Name {get; set;} public DateTime StartDate {get; set;} } //使用初始化器建立employee Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()};
上面的例子在單元測試中才真正有用,但在其他上下文中應該避免,因為類的例項應該使用建構函式建立。
閱讀更多有關初始化器的資訊,請訪問:https://msdn
3)Lambdas,謂詞,delegates和閉包
在許多情況下(例如使用Linq時),這些功能實際上是必需的,確保學習何時以及如何使用它們。
閱讀更多關於Lambdas,謂詞,delegates和閉包的資訊,請訪問:http://www.c
4)??(空合併運算子)
?? – 運算子返回左側,只要它不為null;那樣的情況下返回右側:
//可能為null var someValue = service.GetValue(); var defaultValue = 23 //如果someValue為null,結果將為23 var result = someValue ?? defaultValue;
?? – 運算子可以連結:
string anybody = parm1 ?? localDefault ?? globalDefault;
並且它可以用於將可空型別轉換為不可空:
var totalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);
閱讀更多有關?? – 運算子的資訊,請訪問:https://msdn
5)$“{x}”(字串插值) ——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條件運算子) ——C#6
null條件運算子的工作方式如下:
//Null if customer or customer.profile or customer.profile.age is null var currentAge = customer?.profile?.age;
沒有更多NullReferenceExceptions!
閱讀更多有關?.-運算子的資訊,請訪問:https://msdn.microsoft.com/en-us/library/dn986595.aspx
7)nameof Expression ——C#6
新出來的nameof-expression可能看起來不重要,但它真的有它的價值。當使用自動重構因子工具(如ReSharper)時,你有時需要通過名稱引用方法引數:
public void PrintUserName(User currentUser) { //The refactoring tool might miss the textual reference to current user below if we're renaming it if(currentUser == null) _logger.Error("Argument currentUser is not provided"); //... }
你應該這樣使用它…
public void PrintUserName(User currentUser) { //The refactoring tool will not miss this... if(currentUser == null) _logger.Error($"Argument {nameof(currentUser)} is not provided"); //... }
閱讀更多有關nameof-expression的資訊,請訪問:https://msdn
8)屬性初始化器 ——C#6
屬性初始化器允許你宣告屬性的初始值:
public class User { public Guid Id { get; } = Guid.NewGuid(); // ... }
使用屬性初始化器的一個好處是你不能宣告一個集合:嗯,因此使得屬性不可變。屬性初始化器與C#6主要建構函式語法一起工作。
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的冪,冪指數從2到8(例如,2,4,8,16,32,64,128,256):
public static IEnumerable Power(int number, int exponent) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } }
yield返回可以非常強大,如果它用於正確方式的話。 它使你能夠懶惰地生成一系列物件,即,系統不必列舉整個集合——它就會按需完成。
譯文連結:http://www.codeceo.com/article/10-features-csharp-need-learn.html
英文原文:10 features in C# that you really should learn (and use!)
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 您現在應該開始使用的 10 個 PHP 8.1 功能PHP
- 學習Mysql 你應該懂得MySql
- 你不應該忽略的五個機器學習專案機器學習
- Node.JS學習之二,你應該更多的使用constNode.js
- 你應該學習哪種程式語言?
- 你應該使用哪個雲資料庫?資料庫
- 基於C#的機器學習--我應該接受這份工作嗎-使用決策樹C#機器學習
- 10 個你應該知道的 PHP 比特幣開源專案PHP比特幣
- 關於機器學習,你應該知道的3個熱門專業術語機器學習
- 你真的瞭解深度學習嗎?深度學習
- Java後端學習,你應該看那些書籍?Java後端
- 你應該要知道的JS中的thisJS
- 你真的清楚DateTime in C#嗎?C#
- 你應該知道的16個linux命令Linux
- 【譯】13 個你應該選擇/考慮使用 Flutter 的理由Flutter
- 你應該知道的關於SEO和Javascript的6個事實JavaScript
- PHP開發者應該學習、會用10個PHP7新特性PHP
- 如果你要開發一箇中小學生學習數學的軟體,你應該找 誰去做使用者調研?
- Ubuntu 中的 root 使用者:你應該知道的重要事情Ubuntu
- ETL專業人員應該學習Hadoop的5個理由Hadoop
- 學習程式設計,python和GO語言應該選擇哪一個?程式設計PythonGo
- 當下應該學習Python哪個版本?哪個方向好?Python
- 有的放矢,你應該在效能測試報告中使用的 10 個微觀指標測試報告指標
- 學習哪個程式語言呢?Python和C#哪個好學?PythonC#
- 學習Tomcat,我們應該懂的Tomcat
- 你現在應該閱讀的7本最好的深度學習書籍深度學習
- 程式設計中new[]和delete[]應該如何使用?程式設計delete
- 最怕的就是假裝努力,你真的會學習嗎?
- Unity熱更學習--Lua指令碼使用C#中的事件、委託和協程Unity指令碼C#事件
- 新手應該如何學習JAVAJava
- 10個例子帶你瞭解機器學習中的線性代數機器學習
- Homework 8 如果你要開發一箇中小學生學習數學的軟體,你應該找誰去做使用者調研?
- Time Machine 與 iCloud Drive:應該使用哪個來備份你的Mac?MacCloud
- 遷移學習:該做的和不該做的事遷移學習
- 剛開始接觸MAYA的你,該學習哪個模組呢?
- 每個 Linux 新手都應該知道的 10 個命令Linux
- Laravel 你應該知道的幾個最佳實踐Laravel
- 熱更學習筆記10~11----lua呼叫C#中的List和Dictionary、擴充類中的方法筆記C#