Csharp/C#教程:C# 10个常用特性汇总分享

1)async/await

使用async/await模式,可以在执行代码块操作的时候不会阻塞UI或者当前的线程。即使该操作被某些执行动作延迟了(比如一个web请求),async/await模式也会继续执行后续的代码。

微软文档:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx

2)对象/数组/集合的初始值设定项(initializers)

通过使用对象、数组、集合的初始值设定项,可以很容易地创建类、数组和集合的实例:

//示例类 publicclassEmployee{ publicstringName{get;set;} publicDateTimeStartDate{get;set;} } //使用初始值设定项创建员工实例 Employeeemp=newEmployee{Name="JohnSmith",StartDate=DateTime.Now()};

上述示例中的代码在单元测试中可能非常有帮助,不过在有些情况下也应该避免使用它,比如应该通过构造函数来进行类的实例化的时候。

微软文档:https://msdn.microsoft.com/zh-cn/library/bb384062.aspx

3)Lambda表达式、谓词委托(predicates)、委托(delegates)和闭包(closures)

4)??–null合并运算符(Nullcoalescingoperator)

当表达式左侧不为null的时候,??运算符返回其左侧的值,否则返回其右侧的值:

//可能是null varsomeValue=service.GetValue(); vardefaultValue=23 //如果someValue是null的话,result为23 varresult=someValue??defaultValue;

??运算符可以用于链式操作:

stringanybody=parm1??localDefault??globalDefault;

它也可以将可空类型转换为非可空类型:

vartotalPurchased=PurchaseQuantities.Sum(kvp=>kvp.Value??0);

文档:https://msdn.microsoft.com/zh-cn/library/ms173224.aspx

5)$”{x}”–内插字符串(StringInterpolation)-C#6

C#6的一个新特性,可以通过更加高效和优雅的方式来进行字符串拼接:

//传统方式 varsomeString=String.Format("Somedata:{0},somemoredata:{1}",someVariable,someOtherVariable); //新的方式 varsomeString=$"Somedata:{someVariable},somemoredata:{someOtherVariable}";

也可以在大括号中写C#表达式,这让它变得非常强大。

6)?.–null条件运算符(Null-conditionaloperator)–C#6

null条件运算符使用起来如下所示:

//如果customer或customer.profile或customer.profile.age为null的话,结果都是null varcurrentAge=customer?.profile?.age;

不再会发生NullReferenceExceptions了!

文档:https://msdn.microsoft.com/zh-cn/library/dn986595.aspx

7)nameof表达式–C#6

新的nameof表达式可能看上去没那么重要,不过它确实也有其用武之地。在使用自动重构工具(比如Resharper)时,你可能会需要通过参数的免费精选名字大全来表示它:

publicvoidPrintUserName(UsercurrentUser) { //在重命名currentUser的时候,重构工具可能会遗漏在文本中的这个变量名 if(currentUser==null) _logger.Error("ArgumentcurrentUserisnotprovided"); //... }

现在你可以这样来写:

publicvoidPrintUserName(UsercurrentUser) { //重构工具不会漏掉这个 if(currentUser==null) _logger.Error($"Argument{nameof(currentUser)}isnotprovided"); //... }

文档:https://msdn.microsoft.com/zh-cn/library/dn986596.aspx

8)属性初始值设定项–C#6

你可以通过属性初始值设定项,在声明一个属性的时候指定一个初始值:

publicclassUser { publicGuidId{get;}=Guid.NewGuid(); //... }

使用属性初始

使用属性初始值设定项的一个好处,就是你不必声明一个setter方法,从而使得该属性成为不可变的(immutable)。属性初始值设定项可以和C#6的主构造函数(PrimaryConstructor)语法配合使用。(译者注:PrimaryConstructor语法可以让你在定义一个类的同时,在类名之后立即指定一个带参数的构造函数)

9)as/is运算符

is运算符用来判断一个实例是否是特定类型的,比如你想看一下类型转换是否是可行的:

if(PersonisAdult) { //dostuff }

as运算符会试图将某个对象转换为某个特定类的实例。如果无法转换的话会返回null:

SomeTypey=xasSomeType; if(y!=null) { //dostuff }

10)yield关键字

你可以通过yield关键字来返回IEnumerable接口的数据项。下面的示例会返回2的次方(比如直到8次方:2、4、8、16、32、64、128、256):

publicstaticIEnumerable<int>Power(intnumber,intexponent) { intresult=1; for(inti=0;i<exponent;i++) { result=result*number; yieldreturnresult; } }

如果使用得当的话,yield会变得非常强大。它使得你延迟生成序列中的对象,比如当系统不需要枚举整个集合的时候,可以按需停止。

上述就是C#学习教程:C# 10个常用特性汇总分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/903828.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐