跳至正文
首页 » 博客 » The Top 5 New Features in C#6.0

The Top 5 New Features in C#6.0

Visual Studio 2015最近推出了名为C #6.0的C # 新版本。我不会说它有主要功能添加像扩展方法或LINQ在C #3.0或异步/等待在C #5.0。 ,它具有许多简化语法并提高代码可读性的功能。主要的C #6.0功能包括:

·auto-properties的初始值设定项

·仅Getter自动属性

表达式 · 函数成员

使用static语句 ·

·Null条件运算符

·字符串插值

·nameof表达式

·索引初始值设定项

·异常筛选器

·

在catch和finally块中等待

·

扩展在集合初始化器等中添加方法。

在这篇文章中,我将讨论C #6.0的前5个功能 (根据我J )。自动属性初始值设定项 在C #6.0中,添加了一个新功能来设置公共属性的默认值,称为自动属性初始值设定项。使用自动属性初始化器,我们可以为属性设置默认值,而不必使用构造函数。 ,让我们考虑一个简单的Author类示例,如下面的清单所示:公共作者 {公共 字符串姓名{获取;设置;} 公共 int Articles {get; set ; } = 10;} ,正如您在上面的清单中看到的那样,Articles属性的默认值设置为10。因此,在创建对象时,如果未设置Articles属性的值,则将其设置为默认值10。在下面的列表中,我们没有设置对象a的Articles属性的值,因此它被设置为默认值10。作者a =新建 作者{Name =“DJ”}; 控制台。写线 (a.Name +“已创建”+ a.文章 +“文章”); 控制台。ReadKey ();自动属性初始化器将属性的值直接设置到backing字段中,而不调用setter。在C #6.0之前,我们通过创建私有setter,然后在构造函数中设置值来创建只读属性。但是,在C #6.0中,使用自动属性初始值设定项,可以轻松创建只读属性,如下面的清单所示:公共作者 {公共 字符串姓名{获取;设置;} 公共 int Articles {get;} = 10;} ,使用Auto-property initializer创建具有默认值的只读属性现在非常容易,这使其成为我最喜欢的C #6.0功能之一。支持使用静态语句的静态成员像我一样,你也厌倦了每次使用静态类名,同时调用静态类的方法?例如,如果要使用静态类Console的WriteLine,则每次都需要使用Console.WriteLine(“”)。再说一次,这不是最大的问题,但仍然很烦。C #6.0通过允许我们通过新的静态指令使类型的静态成员在没有类型前缀的情况下可用来解决这个问题。 这样,我们可以简化静态类方法的使用,如下面的清单所示:使用 静态系统。控制台; 命名空间ConsoleApplication1{ 程序 { 静态 void Main( string [] args) {作者a =新建 作者{Name =“DJ”}; 写线 (a.Name +“已创建”+ a.文章 +“文章”); ReadKey( true);}} 在上面的代码片段中,我们通过使用静态语句 ,然后使用WriteLine,ReadKey等方法,而无需每次添加控制台的类名。这使得代码更干净。字符串插值还记得String.format() 吗?我们用它来执行C #6.0之前的字符串插值。您可能没有使用它那么多,但使用起来仍然很复杂,要求您将确切的变量名称与序列匹配以获得预期的输出。考虑下面的列表:静态 void Main( string [] args) {字符串name =dj” ; 智力年龄 = 33;字符串消息 =字符串。格式 (“{0} 已有 {1} 岁”、姓名、年龄); 字符串错误消息 =字符串。格式 (“{0} 已有 {1} 岁”、年龄、姓名); WriteLine (消息); WriteLine (错误消息); ReadKey( true);} 在上面的变量清单中错误消息 ,一个意外的值将被分配,因为我们提供了错误的变量序列。这是string.format() 的问题。您将获得如下所示的输出:在C #6.0中,字符串插值要简单得多。使用 $ now,可以完成字符串插值,如下面的清单所示:静态 void Main( string [] args) {字符串name =dj” ; 智力年龄 = 33; 字符串消息 =$”{name}{年龄}岁“; WriteLine (消息); ReadKey( true);如您所见,} 我们直接在 {} 中传递变量名。这避免了string.format中变量的顺序问题。异常过滤器我最喜欢的C #6.0功能之一是异常过滤器。这允许在CATCH块中捕获异常,在引发异常时只满足指定的条件。在C #6.0之前,我们没有任何机制来过滤catch块中的异常。我们在同一个catch块中使用了if-else语句来带来某种过滤器。为了更好地理解它,让我们考虑下面的列表:静态 void Main( string [] args) { 整型= 24; 尝试 { int rem = 编号 % 0;写线 (rem); } catch (DivideByZeroException exception ex) {控制台。WriteLine (例如消息); }ReadKey (); } 上面代码片段中的主要问题是我们不能在catch块中应用过滤器。在C #6.0中,可以应用异常过滤器,如下面的清单所示: 静态 void Main( string [] args) { 整型= 24; 尝试 { int rem = 编号 % 0;写线 (rem); }接住(DivideByZeroExceptionex)(例如,消息。包含 (“dj”)) {WriteLine (例如消息); }接住(DivideByZeroExceptionex)(ex.Source = =“ConsoleApplication1”) {WriteLine (例如来源); } ReadKey( true);} 在C #6.0中使用 “当”,我们可以过滤异常。特别是在上面的代码片段中,只有当语句中的条件为true时,才会抛出catch语句。过滤异常在这里可能非常有用。Null条件运算符谁没有听说过NullReferenceException?我相信我们所有人。为了避免这种情况,我们使用大量的If条件进行null检查。 让我们考虑下面的代码清单。我们有一个 “作者” 的名单。在获取特定作者的名字之前,我们在if语句中执行null检查。如果我们不这样做,将抛出NullReferenceException。静态 void Main( string [] args) { Author author = null;; 列表 < 作者 > lstAuthors = < 作者 列表 >();lstAuthors.Add (作者); foreach (var a in lstAuthors) {如果 (a != null) ) { 变量名称 = a.name;WriteLine (名称); }} ReadKey( true);} 在C #6.0中,我们可以通过使用Null条件运算符来避免if语句。 我们可以重写上面的代码进行null检查,如下面的清单所示:静态 void Main( string [] args) { Author author = null;; 列表 < 作者 > lstAuthors = < 作者 列表 >();lstAuthors.Add (作者); foreach (var a in lstAuthors) { var名称 = a?.name;写 (姓名); } ReadKey( true);} 在C #6.0中,使用空条件运算符 (?) 进行空引用检查非常容易。我相信这个功能会被广泛使用,因此它是我最喜欢的C #6.0功能之一。所以我们有了它-我的C #6.0的五大功能。你的是什么?在进一步的帖子中,我探索其他人,但在评论中分享你的最爱。感谢您的阅读!

</p