吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3323|回复: 7
收起左侧

[其他转载] [分享]-C# 中 10 个你真的应该学习(和使用!)的功能

[复制链接]
a1188 发表于 2018-4-2 14:04
本帖最后由 wushaominkk 于 2018-4-3 10:59 编辑

如果你开始探索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;那样的情况下返回右侧:


//可能为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);

阅读更多有关?? – 运算符的信息,请访问: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 nullvar 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){    //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;    }}

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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hl301 发表于 2018-4-2 14:23
我怎么看起来排版乱糟糟的,还是我压根不会看???
peterq521 发表于 2018-4-2 15:46
哩个名字好难改 发表于 2018-4-2 21:19
yosoul 发表于 2018-4-3 16:59
哎 看了看 发现自己就剩吃老本了 新特性一个不知道
shelly1314 发表于 2018-4-3 18:19 来自手机
没有想过
bookaccount 发表于 2018-4-4 07:03
很多是语法糖。
andrea225 发表于 2018-4-4 10:32
nameof 好用,原来获取属性名得写一坨,不过通过反射实现的本质没变,还是要注意效率。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表