C# 10个常用特性
感谢一傻小冲的分享 https://www.cnblogs.com/liyichong/p/5434309.html
觉得很实用就搬抄一份收藏,上了年纪记忆力不好了。
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个常用特性的更多相关文章
- ES6的一些常用特性
由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...
- 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)
4 三维 4.1 共享三维场景 用户能够将ArcScene文档导出为3D web场景,能够被加载到ArcGIS Online.Portal或本地Web服务器上并进行分享.这样,用户可以 ...
- MVC常用特性
MVC常用特性使用 简介 在以前的文章中,我和大家讨论如何用SingalR和数据库通知来完成一个消息监控应用. 在上一篇文章中,我介绍了如何在MVC中对MongoDB进行CRUD操作. 今天,我将 ...
- Unity3D编辑器扩展(五)——常用特性(Attribute)以及Selection类
前面写了四篇关于编辑器的: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 Unity3D ...
- mootools常用特性和示例(基础篇1)
网上关于mootools这个库的信息很少. 公司一些老的项目用到了mootools库,因为要维护,所以接触到了mootools. mootools(文档)官网:http://www.chinamoot ...
- 第三节:Vuejs常用特性2和图书案例
一. 常用特性2 1. 监听器 用watch来响应数据的变化, 一般用于异步或者开销较大的操作, watch 中的属性 一定是data 中 已经存在的数据!!! 当需要监听一个对象的改变时,普通的wa ...
- Vue的常用特性
Vue的常用特性 一.表单基本操作 都是通过v-model 单选框 1. 两个单选框需要同时通过v-model 双向绑定 一个值 2. 每一个单选框必须要有value属性 且value值不能一样 3. ...
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- fir.im Weekly - 从 iOS 10 SDK 新特性说起
从 iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 的分屏多任务特性,今年的 WWDC iOS 10 SDK ...
- 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类
快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...
随机推荐
- php xattr操作文件扩展属性后续
由于之前看了xattr的写入效率,这里简单的实现一下生产者消费者模型的高速写入. 生产者(让他创建40万条数据) <?php // 生产者 不断的生产大量数据 但是总会有停止的时候(本业务功能结 ...
- Python:pygame游戏编程之旅七(pygame基础知识讲解1)
与Python自带的random.math.time等模块一样,Pygame框架也带有许多模块来提供绘图.播放声音.处理鼠标输入等功能. 本章将讲述Pygame提供的基本模块及功能,并假设读者已经具有 ...
- ZSTU2023校赛
篠塚真佑実的树 给定\(n\)个节点的树,其中\(m\)个节点存在传送门,当飞船经过存在传送门的节点的时候,可以选择无消耗地传送至其他存在传送门的节点,现在有\(q\)次询问,每次询问给出起点\(st ...
- HTML5 A链接
1.基本使用 a标签常用属性: 属性名 说明 href 规定链接的目标 URL target 已什么形式打开这个连接 target属性有以下几个值 属性名 说明 _self 默认,当前页面跳转 _bl ...
- SFE人才需要具备哪些能力
SFE(销售队伍效力)人才在企业中扮演着至关重要的角色,他们需要具备一系列的能力来确保销售队伍的高效运作和业绩提升.关于SFE的角色和能力,可以从业务理解.数据洞察.向上管理以及效率提升等几个方面来通 ...
- 备份场景全覆盖!腾讯云备份一体机 B2000给您全方位保护
TStor 是腾讯云面向混合云场景打造的存储一体机产品系列.继年初发布对象存储一体机之后,该产品系列再添新成员:TStor B2000,是面向混合云备份场景的一体机产品. 根据权威咨询机构 IDC 和 ...
- PDF 的一些资料
PDF Succinctly https://www.syncfusion.com/ebooks/pdf Create PDFs in ASP.NET - getting started with i ...
- set -euxo pipefail
有些开发人员会用Bash来实现很复杂的功能,就像使用别的高级语言一样.他可能觉得自己很牛逼但其他人早就想锤爆他了,Bash的可读性和可维护性远远低于任何高级语言.更要命的是,Bash并没有方便的调试工 ...
- 【转载】wget命令详解
导读: wget是Linux中的一个下载文件的工具,wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上. 它用在命令行下. ...
- Netty系列之Netty安全性
1.1. 严峻的安全形势 1.1.1. OpenSSL Heart bleed漏洞 2014年上半年对网络安全影响最大的问题就是OpenSSL Heart bleed漏洞,来自Codenomicon和 ...