当前位置: 首页 > 科技观察

C#中你真正应该学习和使用的十个特性

时间:2023-03-13 16:45:50 科技观察

节省大量时间。1)async/await使用async/await模式允许在执行阻塞操作时取消阻塞UI/当前线程。async/await模式的工作原理是让代码继续执行,即使某些东西正在阻止执行(如Web请求)。在此处阅读有关异步/等待模式的更多信息:https://msdn.microsoft.com/en-us/library/hh191443.aspx2)对象/数组/集合初始化器通过使用对象、数组和集合类的实例进行初始化,数组和集合可以轻松创建://一些演示类publicclassEmployee{publicstringName{get;",StartDate=DateTime.Now()};上面的示例仅在单元测试中真正有用,但在其他上下文中应避免使用,因为应使用构造函数创建类的实例。在此处阅读有关初始化程序的更多信息:https://msdn.microsoft.com/en-us/library/bb384062.aspx3)Lambdas,predicates,delegatesandclosures在很多情况下(例如使用Linq时),这些功能实际上是必需的,确保了解何时以及如何使用它们。在以下位置阅读有关Lambda、谓词、委托和闭包的更多信息:http://www.codeaddiction.net/articles/13/lambda-expressions-delegates-predicates-and-closures-in-c4)(空合并运算符)——运算符返回左侧,只要它不为空;在那种情况下返回右侧://maybenullvarsomeValue=service.GetValue();vardefaultValue=23//如果someValue为null,结果将是23varresult=someValue??defaultValue;–运算符可以链接:stringanybody=parm1??localDefault??globalDefault;它可用于将可空类型转换为不可空类型:vartotalPurchased=PurchaseQuantities.Sum(kvp=>kvp.Value??0);在此处阅读有关??运算符的更多信息:https://msdn.microsoft.com/en-us/library/ms173224.aspx5)$"{x}"(字符串插值)-C#6这是C#6允许您以高效和优雅的方式组装字符串://旧方法varsomeString=String.Format("Somedata:{0},somemoredata:{1}",someVariable,someOtherVariable);//新方法varsomeString=$“一些数据:{someVariable},somemore数据:{someOtherVariable}”;您可以将C#表达式放在花括号之间,这使得这种字符串插值非常强大。6).(Null条件运算符)-C#6Null条件运算符的工作方式如下://Nullifcustomerorcustomer.profileorcustomer.profile.ageisnullvarcurrentAge=customer?.profile?.age;没有更多的NullReferenceExceptions!要阅读有关?.-operator的更多信息,请访问:https://msdn.microsoft.com/en-us/library/dn986595.aspx7)nameofExpression-C#6中的新nameof-expression可能会看到Itdoesn't听起来很多,但它确实有它的价值。使用ReSharper等自动重构工具时,有时需要按名称引用方法参数:publicvoidPrintUserName(UsercurrentUser){//如果我们重新命名,重构工具可能会错过下面对currentuser的文本引用if(currentUser==null)_logger.Error("未提供参数当前用户");//...}你应该像这样使用它......publicvoidPrintUserName(UsercurrentUser){//重构工具不会错过这个......//...}阅读更多关于nameof-expression的信息:https://msdn.microsoft.com/en-us/library/dn986596.aspx8)Propertyinitializers-C#6propertyinitializersallowyoutodeclaretheinitialValue:publicclassUser{publicGuidId{get;}=Guid.NewGuid();//...}使用属性初始值设定项的一个好处是您无法声明集合:好吧,因此使属性不可变。属性初始值设定项使用C#6主构造函数语法。9)as和is运算符is运算符用于控制一个实例是否是特定类型,例如,如果你想看是否可以转换:if(PersonisAdult){//dostuff}使用as运算符来尝试将实例转换为类。如果无法转换,则返回null:SomeTypey=xasSomeType;if(y!=null){//dostuff}10)yield关键字yield关键字允许提供一个带有条目的IEnumerable接口。以下示例将返回2的所有指数从2到8的幂(例如,2,4,8,16,32,64,128,256):publicstaticIEnumerablePower(intnumber,intexponent){intresult=1;for(inti=0;i