你確實應該學習並使用的 10 個 C 特性

2022-02-27 00:52:22 字數 3548 閱讀 9991

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

更多關於 async / await 模式的內容,請見:

通過使用物件、陣列、集合的初始值設定項,可以很容易地建立類、陣列和集合的例項:12

3456

78// 示例類

publicclassemployee

publicdatetime startdate

}

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

employee emp =newemployee ;

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

更多關於初始值設定項的內容,請見:

這些特性在很多情況下都是非常必要的(比如使用 linq 的時候),請務必學習在何時以及如何使用它們。

更多關於 lambda 表示式、謂詞委託、委託和閉包的內容,請見:

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

3456

// 可能是 null

var somevalue = service.getvalue();

var defaultvalue = 23

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

var result = somevalue ?? defaultvalue;

?? 運算子可以用於鏈式操作:

1stringanybody = parm1 ?? localdefault ?? globaldefault;

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

1var totalpurchased = purchasequantities.sum(kvp => kvp.value ?? 0);

更多關於 ?? 運算子的內容,請見:

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

345// 傳統方式

var somestring = string.format("some data: , some more data: ", somevariable, someothervariable);

// 新的方式

var somestring = $"some data: , some more data: ";

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

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

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

var currentage = customer?.profile?.age;

不再會發生 nullreferenceexceptions 了!

更多關於 ?. 運算子的內容,請見:

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

3456

78publicvoidprintusername(user currentuser)

現在你可以這樣來寫:12

3456

78publicvoidprintusername(user currentuser)

is not provided");

//...

}

更多關於 nameof 表示式的內容,請見:

你可以通過屬性初始值設定項,在宣告乙個屬性的時候指定乙個初始值:12

345publicclassuser

= guid.newguid();

// ...

}

使用屬性初始值設定項的乙個好處,就是你不必宣告乙個 setter 方法,從而使得該屬性成為不可變的(immutable)。屬性初始值設定項可以和 c# 6 的主建構函式(primary constructor)語法配合使用。(譯者注:primary constructor 語法可以讓你在定義乙個類的同時,在類名之後立即指定乙個帶引數的建構函式)

is 運算子用來判斷乙個例項是否是特定型別的,比如你想看一下型別轉換是否是可行的:12

34if(personisadult)

as 運算子會試圖將某個物件轉換為某個特定類的例項。如果無法轉換的話會返回 null:12

345sometype y = xassometype;

if(y !=null)

你可以通過 yield 關鍵字來返回 ienumerable 介面的資料項。下面的示例會返回 2 的次方(比如直到 8 次方:2、4、8、16、32、64、128、256):12

3456

789publicstaticienumerable<int> power(intnumber,intexponent)

}

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

C 中 10 個你真的應該學習(和使用!)的功能

如果你開始探索c 或決定擴充套件你的知識,那麼你應該學習這些有用的語言功能,這樣做有助於簡化 避免錯誤,節省大量的時間。1 async await 使用async await pattern允許在執行阻塞操作時解除ui 當前執行緒的阻塞。async await pattern的工作原理是讓 繼續執行...

你應該了解的大資料10個新趨勢

當今科技領域發生了巨大的變化,也為大資料改善各行各業的業務 促進經濟增長開啟了大門。資料能幫助組織機構更好地開展工作,大資料分析已經超越了熱門的it趨勢標籤,成為公司業務的一部分。以下是10個新的大資料趨勢。01 迅速發展的物聯網技術 得益於物聯網 iot 技術,我們逐漸可以用智慧型手機來控制家用電...

你應該了解的大資料10個新趨勢

當今科技領域發生了巨大的變化,也為大資料改善各行各業的業務 促進經濟增長開啟了大門。資料能幫助組織機構更好地開展工作,大資料分析已經超越了熱門的it趨勢標籤,成為公司業務的一部分。以下是10個新的大資料趨勢。01 迅速發展的物聯網技術 得益於物聯網 iot 技術,我們逐漸可以用智慧型手機來控制家用電...