千家信息网

C#6.0中的新特性总结

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要讲解了"C#6.0中的新特性总结",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#6.0中的新特性总结"吧!1.Getter 专属自动特性
千家信息网最后更新 2025年11月08日C#6.0中的新特性总结

这篇文章主要讲解了"C#6.0中的新特性总结",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#6.0中的新特性总结"吧!

1.Getter 专属自动特性

之前自动属性必须具有set ,这将对不可变变量不利,因此C# 6.0中允许了只有get的自动属性,编译器将识别这种属性为只读属性,即使没有set是我们还是可以从构造函数中给属性赋值,这个赋值过程时没有set也是可以实现的,它是直接分配到支持的字段,以便对其进行初始化。如下代码所示。

using System;namespace TheNewCSharp6._0{ //Getter专属自动新特性 public class Point {  public int X { get; }  public int Y { get; }  public Point(int x, int y)  {   X = x;   Y = y;  }  public double Dist()  {   return Math.Sqrt(X * X + Y * Y);  }  }}

2.使用静态成员

C# 6.0中引入一种新的using子句,它是引用类型,而非命名空间,这样可以把该类型的静态成员直接放入作用域中,例如在上一个例子中我们要使用Sqrt函数,我们必须添加math前缀,才能调用Sqrt(平方根)方法,

当我们加上

using static System.Math;

就可以无需加math前缀就可以直接使用Sqrt方法,代码如下:

using static System.Math;namespace TheNewCSharp6._0{ //使用静态成员 public class Point1 {  public int X { get; }  public int Y { get; }  public Point1(int x, int y)  {   X = x;   Y = y;  }  public double Dist()  {   return Sqrt(X * X + Y * Y);  } }}

我们一直认为星期一绝对是一周中的某一天,而黄色也是颜色中的一种。如果在代码中每次都要说明方法的归宿,这其实并无太大意义,而这一新特性恰好克服了这一困难。

3.字符串插值

String.Format是非常有用且功能强大的API,但是它很庞大,并且占位符、数字相关问题会让人感觉混淆不清,容易出错,扰乱我们的意图。如果要设置格式的值出现在适当的位置会更好,这就是此字符串内插语法的用途:

public override string ToString()  {   return $"({X},{Y})";  }

对String.Format的调用消失,添加一个美元符号,来表明这是一个内插的字符串。然后删除占位符数字,留出一定空位,把要设置格式的表达式放在相应的空位中,这样放在一起,看起来既清楚,又简洁。

4.表达式体方法

对于很多方法,其主题中只有一个简单的return语句,我们可以使用lambda表达式取代它(而不是语句体)。

这也适用于其他类型的函数成员。对于加算计而言,它是具有单个return语句的get,与两个大括号相比,这样更简洁不少。

学到在这里,我们可以这样编写整个代码,一个表达式和一个箭头,一个get关键字都没有,这样压缩代码使得代码更加紧凑。

using static System.Math;namespace TheNewCSharp6._0{ //表达式体属性 public class Point3 {  public int X { get; }  public int Y { get; }  public Point3(int x, int y){ X = x; Y = y;}  public double Dist => Sqrt(X * X + Y * Y);  public override string ToString() => $"({X},{Y})"; }}

5.索引初始值设定项

//before  public JObject ToJsonOld()  {   var result = new JObject();   result["x"] = X;   result["y"] = Y;   return result;  }

这是一种把点对象转换成JSON对象的方法,通过上述方法可以初始化对象初始值设置项中的属性。

有了C# 6.0后我们可以使用此处明显的方括号语法来分配到内部的索引。

因此可以在一个表达式中对json对象进行初始化,如下:

//After  public JObject ToJsonNew() => new JObject() { ["x"] = X, ["y"] = Y };

6 Null条件运算符

在上面的例子中,我们可以在一行代码中完成对一个json对象的创建赋值,但是,在使用对象前,我们需要对对象进行检查,大多情况下,我们主要是检查对象是否为空,如下所示:

//before  public static Point FromJson(JObject json)  {   if (json != null &&    json["x"] != null &&    json["x"].Type == JTokenType.Integer &&    json["y"] != null &&    json["y"].Type == JTokenType.Integer)   {    return new Point((int)json["x"],(int)json["y"]);   }   return null;  }

我们需要在使用前检查它的本身不为空,再保证其索引结果不为空,保证了能访问之后,再检查值类型。

Null条件运算符主要用于此处处理整个null检查。

下面是我们移除了显示null检查之后的结果。把null判断改为了问点(?.)运算符。工作原理如下,如果左边是null,那么返回null,如果不是null,那么我们可以执行.号右边的运算。

//After  public static Point FromJson1(JObject json)  {   if (json != null &&    json["x"]?.Type == JTokenType.Integer &&    json["y"]?.Type == JTokenType.Integer)   {    return new Point((int)json["x"], (int)json["y"]);   }   return null;  }

如果null 那么null

如果不null 那么执行

我们也可以连环地使用问点运算符 ,简化后如下:

//finally  public static Point FromJson2(JObject json)  {   if (json?["x"]?.Type == JTokenType.Integer &&    json?["y"]?.Type == JTokenType.Integer)   {    return new Point((int)json["x"], (int)json["y"]);   }   return null;  }

这样,这个if条件就只表达你的核心意图,而不用花太多的代码再null判断上。

Null条件运算符对触发时间非常有用,如

OnChanged?.Invoke(this,arg)

而不用在单独去判断委托是否为空,当委托不为空时,执行右边的Invoke()方法。

7.Nameof运算符

很多情况下,我们需要以运算符的形式获取程序元素的名称,Nameof运算符然我们获取元素名称的字符串,知道元素到底指的是什么,是哪些元素,并确保它确实存在。

public void Add(Point point)  {   if(point==null)    throw new ArgumentNullException(nameof(point));  }

8.异常塞选器

异常塞选器可以让catch在捕获异常之前对异常进行筛选,如果异常符合我们的要求,则进行捕获,异常筛选如下:

try   {    ...   }   catch (ConfigurationException e)when (e.IsSevere)   {    ...   }

9.在catch和finally中使用await

越来越多的api采用异步的方式,现在我们也总算可以在catch和finally中调用它们了。

感谢各位的阅读,以上就是"C#6.0中的新特性总结"的内容了,经过本文的学习后,相信大家对C#6.0中的新特性总结这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

运算 代码 对象 方法 运算符 特性 属性 表达式 检查 元素 字符 字符串 成员 条件 类型 函数 情况 索引 语句 静态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 keep苹果服务器超时怎么办 数据库用户级安全机制设置 网络安全法在何时开始实行 直播伴侣服务器终结点无法运行 南二环软件开发学校 服务器怎么开启lan口 加强网络安全防护优缺点 关于《网络安全教育》视频 福建本地软件开发定制费用是多少 辽阳节能软件开发定制 东莞代办网络技术技工证 软件开发指导费 邢台软件开发培训班哪里好 做外贸好还是软件开发好 事业编教师网络安全知识试题 jsp界面实现数据库访问 韩商言 ctf网络安全大赛 dell服务器总代 生存联机服务器手游推荐 租服务器好还是虚拟机好 php数据库导出导入 不能使用数据库的对象是 php数据库密码存放位置 金口碑网络技术有限公司 本底污染物数据库 流放者柯南 服务器管理员 plsql数据库模型创建 软件开发前端和后端哪个好 用友软件开发投标模板 远程云端服务器管理控制工具
0