zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#中十个你真的应该学习并投入使用的功能

c#学习 功能 应该 真的 十个
2023-09-27 14:21:21 时间

如果你开始探索C#或决定扩展你的知识,那么你应该学习这些有用的语言功能,这样做有助于简化代码,避免错误,节省大量的时间。

C#中十个你真的应该学习并投入使用的功能

1)async / await

使用async / await-pattern允许在执行阻塞操作时解除UI /当前线程的阻塞。async / await-pattern的工作原理是让代码继续执行,即使在某些东西阻塞了执行(如Web请求)的情况下。

阅读更多有关async / await-pattern的信息,请访问:https://msdn.microsoft.com/en-us/library/hh191443.aspx

2)对象/数组/集合初始化器

通过使用对象、数组和集合初始化器,可以轻松地创建类、数组和集合的实例:



//使用初始化器创建employee   Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()}; 

上面的例子在单元测试中才真正有用,但在其他上下文中应该避免,因为类的实例应该使用构造函数创建。

阅读更多有关初始化器的信息,请访问:https://msdn.microsoft.com/en-us/library/bb384062.aspx

3)Lambdas,谓词,delegates和闭包

在许多情况下(例如使用Linq时),这些功能实际上是必需的,确保学习何时以及如何使用它们。

阅读更多关于Lambdas,谓词,delegates和闭包的信息,请访问:http://www.codeaddiction.net/articles/13/lambda-expressions-delegates-predicates-and-closures-in-c

4)(空合并运算符)

– 运算符返回左侧,只要它不为null;那样的情况下返回右侧:



string anybody = parm1 ?? localDefault ?? globalDefault; 

并且它可以用于将可空类型转换为不可空:


var totalPurchased = PurchaseQuantities.Sum(kvp =  kvp.Value ?? 0); 

阅读更多有关?? – 运算符的信息,请访问:https://msdn.microsoft.com/en-us/library/ms173224.aspx

5)$“{x}”(字符串插值) ——C#6

这是C#6的一个新功能,可以让你用高效和优雅的方式组装字符串:



//旧方法  var someString = String.Format("Some data: {0}, some more data: {1}", someVariable, someOtherVariable);  //新方法  var someString = $"Some data: {someVariable}, some more data: {someOtherVariable}"; 

你可以把C#表达式放在花括号之间,这使得此字符串插值非常强大。

6).(Null条件运算符) ——C#6

null条件运算符的工作方式如下:



//Null if customer or customer.profile or customer.profile.age is null  var currentAge = customer?.profile?.age; 

没有更多NullReferenceExceptions!

阅读更多有关?.-运算符的信息,请访问:https://msdn.microsoft.com/en-us/library/dn986595.aspx

7)nameof Expression ——C#6

新出来的nameof-expression可能看起来不重要,但它真的有它的价值。当使用自动重构因子工具(如ReSharper)时,你有时需要通过名称引用方法参数:



    //The refactoring tool might miss the textual reference to current user       below if were renaming it      if(currentUser == null)          _logger.Error("Argument currentUser is not provided");      //... 

你应该这样使用它…



    if(currentUser == null)          _logger.Error($"Argument {nameof(currentUser)} is not provided");      //... 

阅读更多有关nameof-expression的信息,请访问:https://msdn.microsoft.com/en-us/library/dn986596.aspx

8)属性初始化器 ——C#6

属性初始化器允许你声明属性的初始值:



使用属性初始化器的一个好处是你不能声明一个集合:嗯,因此使得属性不可变。属性初始化器与C#6主要构造函数语法一起工作。

9)as和is 运算符

is 运算符用于控制实例是否是特定类型,例如,如果你想看看是否可能转换:



10)yield 关键字

yield 关键字允许提供带有条目的IEnumerable接口。 以下示例将返回每个2的幂,幂指数从2到8(例如,2,4,8,16,32,64,128,256):



yield返回可以非常强大,如果它用于正确方式的话。 它使你能够懒惰地生成一系列对象,即,系统不必枚举整个集合——它就会按需完成。


作者:小峰

来源:51CTO


关于机器人流程自动化 不可不知的十个秘密 机器人流程自动化工具通过添加可智能处理旧代码和有助于延长其使用期限的新图层,为遗留系统赋予了新的生命。许多机器人流程自动化工具还可以由非编程人员来部署,从而使那些使用旧工具感到苦恼的人能够通过拖放新图标来改善其工作流程。通过选择恰当的工具和实现方法,任何能够编写电子表格宏的人都可以使用机器人流程自动化来简化工作流程。但在机器人流程自动化为您的系统带来的这些好处背后,还隐藏着一些问题,随着时间的推移,这些问题可能会带来麻烦。
太难了!我耗费心力终于规划出了一张云栖大会日程表 十年前,参加云栖大会还只是程序员的杭州朝圣之旅,而如今,它依然成了透视和分析云计算产业和窥见数字经济的窗口。一切你想看见的、期待看见的,甚至未曾预见的,都会在未来的三天中扑面而来。
周末荐书 | 连续54年盈利!这家企业的持续发展是怎样实现的(赠书) 宫内义彦同欧力士集团风雨同舟50载,带领并见证了企业的每一步发展,在长达50多年的管理实践中积累了宝贵的企业管理经验,《我的经营论》正是作者毕生经验的结晶,企业持续发展的秘密就蕴藏其中。