使用 async / await 模式,可以在執行**塊操作的時候不會阻塞 ui 或者當前的執行緒。即使該操作被某些執行動作延遲了(比如乙個 web 請求),async / await 模式也會繼續執行後續的**。
更多關於 async / await 模式的內容,請見:
通過使用物件、陣列、集合的初始值設定項,可以很容易地建立類、陣列和集合的例項:12
3456
78// 示例類
public
class
employee
public
datetime startdate
}
// 使用初始值設定項建立員工例項
employee emp =
new
employee ;
上述示例中的**在單元測試中可能非常有幫助,不過在有些情況下也應該避免使用它,比如應該通過建構函式來進行類的例項化的時候。
更多關於初始值設定項的內容,請見:
這些特性在很多情況下都是非常必要的(比如使用 linq 的時候),請務必學習在何時以及如何使用它們。
更多關於 lambda 表示式、謂詞委託、委託和閉包的內容,請見:
當表示式左側不為 null 的時候,?? 運算子返回其左側的值,否則返回其右側的值:12
3456
// 可能是 null
var somevalue = service.getvalue();
var defaultvalue = 23
// 如果 somevalue 是 null 的話,result 為 23
var result = somevalue ?? defaultvalue;
?? 運算子可以用於鏈式操作:
1string
anybody = 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
78public
void
printusername(user currentuser)
現在你可以這樣來寫:12
3456
78public
void
printusername(user currentuser)
is not provided"
);
//...
}
更多關於 nameof 表示式的內容,請見:
你可以通過屬性初始值設定項,在宣告乙個屬性的時候指定乙個初始值:12
345public
class
user
= guid.newguid();
// ...
}
使用屬性初始值設定項的乙個好處,就是你不必宣告乙個 setter 方法,從而使得該屬性成為不可變的(immutable)。屬性初始值設定項可以和 c# 6 的主建構函式(primary constructor)語法配合使用。(譯者注:primary constructor 語法可以讓你在定義乙個類的同時,在類名之後立即指定乙個帶引數的建構函式)
is 運算子用來判斷乙個例項是否是特定型別的,比如你想看一下型別轉換是否是可行的:12
34if
(person
is
adult)
as 運算子會試圖將某個物件轉換為某個特定類的例項。如果無法轉換的話會返回 null:12
345sometype y = x
as
sometype;
if
(y !=
null
)
你可以通過 yield 關鍵字來返回 ienumerable 介面的資料項。下面的示例會返回 2 的次方(比如直到 8 次方:2、4、8、16、32、64、128、256):12
3456
789public
static
ienumerable<
int
> power(
int
number,
int
exponent)
}
如果使用得當的話,yield 會變得非常強大。它使得你延遲生成序列中的物件,比如當系統不需要列舉整個集合的時候,可以按需停止。
C 中 10 個你真的應該學習(和使用!)的功能
如果你開始探索c 或決定擴充套件你的知識,那麼你應該學習這些有用的語言功能,這樣做有助於簡化 避免錯誤,節省大量的時間。1 async await 使用async await pattern允許在執行阻塞操作時解除ui 當前執行緒的阻塞。async await pattern的工作原理是讓 繼續執行...
你應該了解的大資料10個新趨勢
當今科技領域發生了巨大的變化,也為大資料改善各行各業的業務 促進經濟增長開啟了大門。資料能幫助組織機構更好地開展工作,大資料分析已經超越了熱門的it趨勢標籤,成為公司業務的一部分。以下是10個新的大資料趨勢。01 迅速發展的物聯網技術 得益於物聯網 iot 技術,我們逐漸可以用智慧型手機來控制家用電...
你應該了解的大資料10個新趨勢
當今科技領域發生了巨大的變化,也為大資料改善各行各業的業務 促進經濟增長開啟了大門。資料能幫助組織機構更好地開展工作,大資料分析已經超越了熱門的it趨勢標籤,成為公司業務的一部分。以下是10個新的大資料趨勢。01 迅速發展的物聯網技術 得益於物聯網 iot 技術,我們逐漸可以用智慧型手機來控制家用電...