C# 中 10 个你真的应该学习(和使用!)的功能

本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!

如果你开始探索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)对象/数组/集合初始化器

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

//一些演示类
public class Employee {
    public string Name {get; set;}
    public DateTime StartDate {get; set;}
}

//使用初始化器创建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;那样的情况下返回
//可能为null var someValue = service.GetValue(); var defaultValue = 23

//如果someValue为null,结果将为23 var result = someValue ?? defaultValue; ?? – 运算符可以链接:
ing 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)时,你有时需要通过名称引用方法参数:

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”);

//... }

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

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

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

public class User {
public Guid Id { get; } = Guid.NewGuid();
// … }

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

9)as和is 运算符

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

if (Person is Adult) {
}

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


> 译文链接:http://www.codeceo.com/article/10-features-csharp-need-learn.html
> 英文原文:10 features in C# that you really should learn (and use!)
> 翻译作者:码农网 – 小峰 [ 转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常用方法类库 一、SR.ShareFunc.DataFunc 1.SR.ShareFunc.DataFunc.DataConvertExcel(Data转Excel文件) 1.1 DataTable转Xls文件 4个重载方法 1.2 DataSet转Xls文件 4个重载方法 2.SR.ShareFunc.DataFunc.DataGridViewFunc(DataGridView方法) 2.1 DataGridView打印 9个重载方法 2.2 DataGridView转Xls文件 4个重载方法 3.SR.ShareFunc.DataFunc.DataTableConvertPdf(DataTable转Pdf文件) 6个重载方法 二、SR.ShareFunc.FormFunc 4.SR.ShareFunc.FormFunc.ControlConvertToForm(Control转Form窗体) 7个重载方法 5.SR.ShareFunc.FormFunc.CreateControlFunc (利用反射(需要制定Dll文件、命名空间)实现实例化、调用) 3个重载方法 三、SR.ShareFunc.RemoteDeskTop 6.SR.ShareFunc.RemoteDeskTop.ucRemoteDeskTop 远程桌面的监控界面控件 原理:利用System.Runtime.Remoting将监控端的鼠标、键盘消息发送到被监控主机, 并将被监控端桌面图片不停发送到监控端显示,从而实现远程桌面 可实现监视、监控,设置监控界面刷新时间 7.SR.ShareFunc.RemoteDeskTop.RemoteDeskTopClient 远程桌面客户端端口注册 四、SR.ShareFunc.StringFunc 8.SR.ShareFunc.StringFunc.RandomStrings 8.1 按照指定最大值、最小值、个数,随机生成数组 8.2 按照指定最大值、最小值、个数,随机生成字符格式的数字 9.SR.ShareFunc.StringFunc.StringEncryFunc 9.1 Dec方式加密 9.2 Dec方式解密 9.3 MD5加密 10.SR.ShareFunc.StringFunc.ValidateUnUsedCode 常用验证非法字符、格式转化 五、SR.ShareFunc.WinFunc 11.SR.ShareFunc.WinFunc.FileFunc 11.1 系统垃圾文件清理 11.2 文件的文件名、后缀名、文件路径的处理 11.3 同名文件的处理(用于自动在同名文件后增加字符) 12.SR.ShareFunc.WinFunc.LogFunc 按照指定路径、文件名生成日志信息 13.SR.ShareFunc.WinFunc.MouseMoveControl 给指定控件绑定鼠标移动事件,例如Label绑定后,鼠标点击该Label可进行窗体拖拽 或实现自定义的窗体拖拽 14.SR.ShareFunc.WinFunc.MsgShowFunc 自定义的Windows消息窗体,主要能显示错误代码显示。5个重载方法 15.SR.ShareFunc.WinFunc.SystemHotKey Windows全局钩子(系统热键),可以实现自定义的系统热键处理 16.SR.ShareFunc.WinFunc.WaitFormFunc 16.1 等待窗体显示(可指定显示的消息) 16.2 等待窗体关闭 17.SR.ShareFunc.WinFunc.WindowsFuns 17.1 Windows注销、重启、关机 17.2 获取Windows系统硬件设备信息,如主板、网卡等 17.3 获取各种格式的系统时间、农历时间 17.4 获取Windows系统屏幕大小、系统剪贴板操作 六、SR.ShareFunc.XmlFunc 18.SR.ShareFunc.XmlFunc.XmlCommonFunc Xml文件操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值