首页技术文章正文

C# 中 10 个你要学习的功能【黑马C++培训】

更新时间:2019年08月05日 10时28分33秒 来源:黑马程序员论坛

黑马中级程序员课程

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

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


2)对象/数组/集合初始化器
通过使用对象、数组和集合初始化器,可以轻松地创建类、数组和集合的实例:
//一些演示类public class Employee {    public string Name {get; set;}    public DateTime StartDate {get; set;}}//使用初始化器创建employee Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()};
上面的例子在单元测试中才真正有用,但在其他上下文中应该避免,因为类的实例应该使用构造函数创建。


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


4)??(空合并运算符)
?? – 运算符返回左侧,只要它不为null;那样的情况下返回右侧:
//可能为nullvar someValue = service.GetValue();var defaultValue = 23//如果someValue为null,结果将为23var result = someValue ?? defaultValue;
?? – 运算符可以链接:
string anybody = parm1 ?? localDefault ?? globalDefault;
并且它可以用于将可空类型转换为不可空:
var totalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);

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 nullvar currentAge = customer?.profile?.age;
没有更多NullReferenceExceptions!


7)nameof Expression ——C#6
新出来的nameof-expression可能看起来不重要,但它真的有它的价值。当使用自动重构因子工具(如ReSharper)时,你有时需要通过名称引用方法参数:
public void PrintUserName(User currentUser){    //The refactoring tool might miss the textual reference to current user     below if we're renaming it    if(currentUser == null)        _logger.Error("Argument currentUser is not provided");    //...}
你应该这样使用它…
public void PrintUserName(User currentUser){    //The refactoring tool will not miss this...    if(currentUser == null)        _logger.Error($"Argument {nameof(currentUser)} is not provided");    //...}


8)属性初始化器 ——C#6
属性初始化器允许你声明属性的初始值:
public class User{     public Guid Id { get; } = Guid.NewGuid();    // ...}
使用属性初始化器的一个好处是你不能声明一个集合:嗯,因此使得属性不可变。属性初始化器与C#6主要构造函数语法一起工作。

9)as和is 运算符
is 运算符用于控制实例是否是特定类型,例如,如果你想看看是否可能转换:
if (Person is Adult){    //do stuff}
使用as运算符尝试将实例转换为类。如果不能转换,它将返回null:
SomeType y = x as SomeType;if (y != null){    //do stuff}10)yield 关键字
yield 关键字允许提供带有条目的IEnumerable接口。 以下示例将返回每个2的幂,幂指数从2到8(例如,2,4,8,16,32,64,128,256):
public static IEnumerable Power(int number, int exponent){    int result = 1;    for (int i = 0; i < exponent; i++)    {      result = result * number;      yield return result;    }}
yield返回可以非常强大,如果它用于正确方式的话。 它使你能够懒惰地生成一系列对象,即,系统不必枚举整个集合——它就会按需完成。


推荐了解热门学科

java培训Python人工智能Web前端培训PHP培训
区块链培训影视制作培训C++培训产品经理培训
UI设计培训新媒体培训产品经理培训Linux运维
大数据培训智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程

Python入门教程完整版(懂中文就能学会)零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!