1)async / await
运用async / await-pattern许可在实行壅塞操纵时消除UI /当前线程的壅塞。async / await-pattern的事情道理是让代码继承实行,纵然在某些东西壅塞了实行(如Web要求)的情况下。
2)对象/数组/鸠合初始化器
经由过程运用对象、数组和鸠合初始化器,可以轻松地建立类、数组和鸠合的实例:
//一些演示类publicclassEmployee{ publicstringName { get; set;} publicDateTime StartDate { get; set;}} //运用初始化器建立employee Employee emp = newEmployee {Name= "John Smith", StartDate=DateTime.Now()};
上面的例子在单元测试中才真正有效,但在其他高低文中应当防止,由于类的实例应当运用组织函数建立。
3)Lambdas,谓词,delegates和 闭包
在很多情况下(比方运用Linq时),这些功用实际上是必须的,确保进修什么时候以及怎样运用它们。
4)??(空兼并运算符)
?? – 运算符返回左边,只需它不为null;那样的情况下返回右边:
//可以为nullvarsomeValue = service. GetValue(); vardefaultValue = 23//假如someValue为null,效果将为23varresult = someValue ?? defaultValue;
?? – 运算符可以链接:
stringanybody = parm1 ?? localDefault ?? globalDefault;
而且它可以用于将可空范例转换为不可空:
vartotalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);
5)$“{x}”(字符串插值) ——C#6
这是C#6的一个新功用,可以让你用高效和文雅的体式格局组装字符串:
//旧要领varsomeString = String.Format( "Some data: {0}, some more data: {1}", someVariable, someOtherVariable); //新要领varsomeString = $"Some data: {someVariable}, some more data: {someOtherVariable}";
你可以把C#表达式放在花括号之间,这使得此字符串插值异常壮大。
6)?.(Null前提运算符) ——C#6
null前提运算符的事情体式格局以下:
//Null ifcustomer orcustomer.profile orcustomer.profile.age isnullvar currentAge = customer?.profile?.age;
没有更多NullReferenceExceptions!
7)nameof Expression ——C#6
新出来的nameof-expression可以看起来不重要,但它真的有它的代价。当运用自动重构因子东西(如ReSharper)时,你偶然须要经由过程称号援用要领参数:
publicvoid PrintUserName( UsercurrentUser){ //The refactoring tool might miss the textual reference to current user below ifwe're renaming it if(currentUser == null) _logger. Error( "Argument currentUser is not provided"); //...}
你应当如许运用它…
publicvoidPrintUserName(User currentUser){ //The refactoring tool will not miss this...if(currentUser == null) _logger.Error( $"Argument {nameof(currentUser)}is not provided"); //...} 8)属性初始化器 ——C#6
属性初始化器许可你声明属性的初始值:
publicclassUser{ publicGuidId{ get; } = Guid. NewGuid(); // ...}
运用属性初始化器的一个优点是你不能声明一个鸠合:嗯,因而使得属性不可变。属性初始化器与C#6重要组织函数语法一同事情。
9)as和is 运算符
is 运算符用于掌握实例是不是是特定范例,比方,假如你想看看是不是可以转换:
if( PersonisAdult){ //do stuff}
运用as运算符尝试将实例转换为类。假如不能转换,它将返回null:
SomeType y = x asSomeType; if(y != null){ //do stuff} 10)yield关键字
yield 关键字许可供应带有条目的IEnumerable接口。以下示例将返回每一个2的幂,幂指数从2到8(比方,2,4,8,16,32,64,128,256):
publicstaticIEnumerable Power(intnumber, intexponent){ intresult = 1; for( inti = 0; i < exponent; i++) { result = result * number; yieldreturnresult; }}
yield返回可以异常壮大,假如它用于准确体式格局的话。它使你可以懒散地生成一系列对象,即,体系没必要罗列全部鸠合——它就会按需完成。
更多C# 中 10 个你真的应当进修(和运用!)的功用相干文章请关注ki4网!