C# 10个常用特性汇总
1) async / await
使用 async / await 模式,可以在执行代码块操作的时候不会阻塞 UI 或者当前的线程。即使该操作被某些执行动作延迟了(比如一个 web 请求),async / await 模式也会继续执行后续的代码。
微软文档:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx
2) 对象 / 数组 / 集合的初始值设定项(initializers)
通过使用对象、数组、集合的初始值设定项,可以很容易地创建类、数组和集合的实例:
// 示例类 public class Employee { public string Name {get; set;} public DateTime StartDate {get; set;} } // 使用初始值设定项创建员工实例 Employee emp = new Employee {Name="John Smith", StartDate=DateTime.Now()};
上述示例中的代码在单元测试中可能非常有帮助,不过在有些情况下也应该避免使用它,比如应该通过构造函数来进行类的实例化的时候。
微软文档:https://msdn.microsoft.com/zh-cn/library/bb384062.aspx
3) Lambda 表达式、谓词委托(predicates)、委托(delegates)和闭包(closures)
4) ?? – null 合并运算符(Null coalescing operator)
当表达式左侧不为 null 的时候,?? 运算符返回其左侧的值,否则返回其右侧的值:
// 可能是 null var someValue = service.GetValue(); var defaultValue = 23 // 如果 someValue 是 null 的话,result 为 23 var result = someValue ?? defaultValue;
?? 运算符可以用于链式操作:
string anybody = parm1 ?? localDefault ?? globalDefault;
它也可以将可空类型转换为非可空类型:
var totalPurchased = PurchaseQuantities.Sum(kvp => kvp.Value ?? 0);
文档:https://msdn.microsoft.com/zh-cn/library/ms173224.aspx
5) $”{x}” – 内插字符串(String Interpolation)- 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 条件运算符(Null-conditional operator) – C# 6
null 条件运算符使用起来如下所示:
// 如果 customer 或 customer.profile 或 customer.profile.age 为 null 的话,结果都是 null var currentAge = customer?.profile?.age;
不再会发生 NullReferenceExceptions 了!
文档:https://msdn.microsoft.com/zh-cn/library/dn986595.aspx
7) nameof 表达式 – C# 6
新的 nameof 表达式可能看上去没那么重要,不过它确实也有其用武之地。在使用自动重构工具(比如 Resharper)时,你可能会需要通过参数的名字来表示它:
public void PrintUserName(User currentUser) { // 在重命名 currentUser 的时候,重构工具可能会遗漏在文本中的这个变量名 if(currentUser == null) _logger.Error("Argument currentUser is not provided"); //... }
现在你可以这样来写:
public void PrintUserName(User currentUser) { // 重构工具不会漏掉这个 if(currentUser == null) _logger.Error($"Argument {nameof(currentUser)} is not provided"); //... }
文档:https://msdn.microsoft.com/zh-cn/library/dn986596.aspx
8) 属性初始值设定项 – C# 6
你可以通过属性初始值设定项,在声明一个属性的时候指定一个初始值:
public class User { public Guid Id { get; } = Guid.NewGuid(); // ... }
使用属性初始
使用属性初始值设定项的一个好处,就是你不必声明一个 setter 方法,从而使得该属性成为不可变的(immutable)。属性初始值设定项可以和 C# 6 的主构造函数(Primary Constructor)语法配合使用。(译者注:Primary Constructor 语法可以让你在定义一个类的同时,在类名之后立即指定一个带参数的构造函数)
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 的次方(比如直到 8 次方:2、4、8、16、32、64、128、256):
public static IEnumerable<int> Power(int number, int exponent) { int result = 1; for (int i = 0; i < exponent; i++) { result = result * number; yield return result; } }
如果使用得当的话,yield 会变得非常强大。它使得你延迟生成序列中的对象,比如当系统不需要枚举整个集合的时候,可以按需停止。
以上就是C# 10个常用特性汇总的详细内容,更多关于C# 常用特性的资料请关注猪先飞其它相关文章!
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25