千家信息网

C#6.0中的新特性总结

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"C#6.0中的新特性总结",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#6.0中的新特性总结"吧!1.Getter 专属自动特性
千家信息网最后更新 2026年11月02日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安全错误 数据库的锁怎样保障安全 互联网科技网 美国互联网保险保险科技 碳银互联网科技 致聘互联网科技 互联网金融监管科技 博兴的互联网电子科技公司 现代科技和互联网有关系吗 中国互联网有什么科技含量 互联网科技与管理 宜昌元轩互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 速维有品互联网信息科技(苏州)有限公司 消费医药和互联网科技 乌苏新华互联网科技做什么的 允成互联网科技有限公司融资 华夏恒生科技与互联网科技 阿里互联网科技企业 江苏苏星互联网科技有限公司 数字互联网科技有限公司 中国主要互联网科技公司 互联网 科技公司 期待互联网科技 长亮科技互联网金融 中国科技互联网公司收入 北京华百购互联网科技有限公司 厦门比较好的科技互联网公司 互联网金融科技展 科技互联网的核心竞争力 北京互联网科技类企业分布 利用互联网等科技手段
0