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

简介:

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

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


 
 
  1. //一些演示类 
  2. public class Employee { 
  3.     public string Name {get; set;} 
  4.     public DateTime StartDate {get; set;} 
  5. //使用初始化器创建employee  
  6. 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;那样的情况下返回右侧:


 
 
  1. //可能为null 
  2. var someValue = service.GetValue(); 
  3. var defaultValue = 23 
  4.  
  5. //如果someValue为null,结果将为23 
  6. var result = someValue ?? defaultValue; 

– 运算符可以链接:


 
 
  1. string anybody = parm1 ?? localDefault ?? globalDefault; 

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


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

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

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

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


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

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

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

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


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

没有更多NullReferenceExceptions!

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

7)nameof Expression ——C#6

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


 
 
  1. public void PrintUserName(User currentUser) 
  2.     //The refactoring tool might miss the textual reference to current user  
  3.     below if we're renaming it 
  4.     if(currentUser == null
  5.         _logger.Error("Argument currentUser is not provided"); 
  6.  
  7.     //... 

你应该这样使用它…


 
 
  1. public void PrintUserName(User currentUser) 
  2.     //The refactoring tool will not miss this... 
  3.     if(currentUser == null
  4.         _logger.Error($"Argument {nameof(currentUser)} is not provided"); 
  5.  
  6.     //... 

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

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

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


 
 
  1. public class User 
  2.     public Guid Id { get; } = Guid.NewGuid(); 
  3.     // ... 

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

9)as和is 运算符

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


 
 
  1. if (Person is Adult) 
  2.     //do stuff 

使用as运算符尝试将实例转换为类。如果不能转换,它将返回null:


 
 
  1. SomeType y = x as SomeType; 
  2. if (y != null
  3.     //do stuff 

10)yield 关键字

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


 
 
  1. public static IEnumerable Power(int number, int exponent) 
  2.     int result = 1
  3.     for (int i = 0; i < exponent; i++) 
  4.     { 
  5.       result = result * number; 
  6.       yield return result; 
  7.     } 

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


作者:小峰

来源:51CTO

相关文章
|
1月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
1月前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
1月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
2月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`&lt;input type=&quot;file&quot;&gt;`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
148 15
|
2月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
58 8
|
2月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
2月前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
51 0
|
2月前
|
C#
如何使用c# 实现断点续传功能
如何使用c# 实现断点续传功能
29 0
|
2月前
|
网络协议 C#
C#:简化版的实现断点续传功能
C#:简化版的实现断点续传功能
36 0
|
7月前
|
C#
C#的基本语法结构学习
【5月更文挑战第17天】C#基础语法包括变量(如`int x = 10`)、常量(`const int MAX_VALUE = 100`)、运算符(如算术和比较运算符)、控制语句(if、for、while等)和函数声明(`int Add(int x, int y) { return x + y; }`)。这些构成C#程序的基本元素。
81 0