C# 10個(gè)常用特性匯總
1) async / await
使用 async / await 模式,可以在執(zhí)行代碼塊操作的時(shí)候不會阻塞 UI 或者當(dāng)前的線程。即使該操作被某些執(zhí)行動作延遲了(比如一個(gè) web 請求),async / await 模式也會繼續(xù)執(zhí)行后續(xù)的代碼。
微軟文檔:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx
2) 對象 / 數(shù)組 / 集合的初始值設(shè)定項(xiàng)(initializers)
通過使用對象、數(shù)組、集合的初始值設(shè)定項(xiàng),可以很容易地創(chuàng)建類、數(shù)組和集合的實(shí)例:
// 示例類
public class Employee {
public string Name {get; set;}
public DateTime StartDate {get; set;}
}
// 使用初始值設(shè)定項(xiàng)創(chuàng)建員工實(shí)例
Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()};
上述示例中的代碼在單元測試中可能非常有幫助,不過在有些情況下也應(yīng)該避免使用它,比如應(yīng)該通過構(gòu)造函數(shù)來進(jìn)行類的實(shí)例化的時(shí)候。
微軟文檔:https://msdn.microsoft.com/zh-cn/library/bb384062.aspx
3) Lambda 表達(dá)式、謂詞委托(predicates)、委托(delegates)和閉包(closures)
4) ?? – null 合并運(yùn)算符(Null coalescing operator)
當(dāng)表達(dá)式左側(cè)不為 null 的時(shí)候,?? 運(yùn)算符返回其左側(cè)的值,否則返回其右側(cè)的值:
// 可能是 null var someValue = service.GetValue(); var defaultValue = 23 // 如果 someValue 是 null 的話,result 為 23 var result = someValue ?? defaultValue;
?? 運(yùn)算符可以用于鏈?zhǔn)讲僮鳎?/p>
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 的一個(gè)新特性,可以通過更加高效和優(yōu)雅的方式來進(jìn)行字符串拼接:
// 傳統(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# 表達(dá)式,這讓它變得非常強(qiáng)大。
6) ?. – null 條件運(yùn)算符(Null-conditional operator) – C# 6
null 條件運(yùn)算符使用起來如下所示:
// 如果 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 表達(dá)式 – C# 6
新的 nameof 表達(dá)式可能看上去沒那么重要,不過它確實(shí)也有其用武之地。在使用自動重構(gòu)工具(比如 Resharper)時(shí),你可能會需要通過參數(shù)的名字來表示它:
public void PrintUserName(User currentUser)
{
// 在重命名 currentUser 的時(shí)候,重構(gòu)工具可能會遺漏在文本中的這個(gè)變量名
if(currentUser == null)
_logger.Error("Argument currentUser is not provided");
//...
}
現(xiàn)在你可以這樣來寫:
public void PrintUserName(User currentUser)
{
// 重構(gòu)工具不會漏掉這個(gè)
if(currentUser == null)
_logger.Error($"Argument {nameof(currentUser)} is not provided");
//...
}
文檔:https://msdn.microsoft.com/zh-cn/library/dn986596.aspx
8) 屬性初始值設(shè)定項(xiàng) – C# 6
你可以通過屬性初始值設(shè)定項(xiàng),在聲明一個(gè)屬性的時(shí)候指定一個(gè)初始值:
public class User
{
public Guid Id { get; } = Guid.NewGuid();
// ...
}
使用屬性初始
使用屬性初始值設(shè)定項(xiàng)的一個(gè)好處,就是你不必聲明一個(gè) setter 方法,從而使得該屬性成為不可變的(immutable)。屬性初始值設(shè)定項(xiàng)可以和 C# 6 的主構(gòu)造函數(shù)(Primary Constructor)語法配合使用。(譯者注:Primary Constructor 語法可以讓你在定義一個(gè)類的同時(shí),在類名之后立即指定一個(gè)帶參數(shù)的構(gòu)造函數(shù))
9) as / is 運(yùn)算符
is 運(yùn)算符用來判斷一個(gè)實(shí)例是否是特定類型的,比如你想看一下類型轉(zhuǎn)換是否是可行的:
if (Person is Adult)
{
//do stuff
}
as 運(yùn)算符會試圖將某個(gè)對象轉(zhuǎn)換為某個(gè)特定類的實(shí)例。如果無法轉(zhuǎn)換的話會返回 null:
SomeType y = x as SomeType;
if (y != null)
{
//do stuff
}
10) yield 關(guān)鍵字
你可以通過 yield 關(guān)鍵字來返回 IEnumerable 接口的數(shù)據(jù)項(xiàng)。下面的示例會返回 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ù)脑?,yield 會變得非常強(qiáng)大。它使得你延遲生成序列中的對象,比如當(dāng)系統(tǒng)不需要枚舉整個(gè)集合的時(shí)候,可以按需停止。
以上就是C# 10個(gè)常用特性匯總的詳細(xì)內(nèi)容,更多關(guān)于C# 常用特性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# Winform 調(diào)用系統(tǒng)接口操作 INI 配置文件的代碼
封裝了一小段代碼, 調(diào)用系統(tǒng)接口, 操作配置文件. 一般用于 .ini 文件, 或者其它鍵值對格式的配置文件2011-05-05
C#創(chuàng)建windows系統(tǒng)用戶的方法
這篇文章主要介紹了C#創(chuàng)建windows系統(tǒng)用戶的方法,涉及C#操作用戶名、密碼、顯示名稱、描述、是否強(qiáng)制修改密碼、密碼是否過期等技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
c#實(shí)現(xiàn)萬年歷示例分享 萬年歷農(nóng)歷查詢
這篇文章主要介紹了c#實(shí)現(xiàn)萬年歷的方法,可以顯示農(nóng)歷、節(jié)氣、節(jié)日、星座、星宿、屬相、生肖、閏年月、時(shí)辰,大家參考使用吧2014-01-01

