C# 6 的新特性

还是记录一下吧,好记性不如烂笔头。

1、静态的 using 声明

静态的 using 声明允许条用方法时候不适用类名。

C# 5:

using System;
//etc
Console.WriteLine("Hello,World!");

C# 6:

using static System.Console;
//etc.
Writeline("Hello,World");

2、表达式体方法

表达式体方法只包括一个可以用 lambda语法编写语句:

C# 5:

public bool IsSquare(Rectangle rect)
{return rect.Height == rect.Width;
}

C# 6:

public bool IsSquare (Rectangle rect) => rect.Height == rect.Width;

3、表达式体属性 

与表达式体方法类似,只有get存取器的单行属性可以用lambda语法编写:

C# 5

public string FullName
{get{return FirstName + "" + LastName;}
}

C# 6

public string FullName => FirstName + "" +LastName;

4、自动实现的属性初始化器

自动实现的属性可以用属性初始化器来初始化:

C# 5

public class Person
{public Person(){Age = 24;}public int Age { get;set;}
}

          C# 6

public class Person
{public int Age {get;set;} = 42;
}

5、只读的自动属性

 为了实现只读属性,C# 5 需要使用完整的属性语法:而在C# 6中,可以使用自动实现的属性:

C# 5

private readonly int _bookId;public BooKId
{get{ret _bookId;}
}

 C# 6

public BookId {get;}

6、nameof 运算符

使用新的nameof运算符,可以访问字段名、属性名、方法名或者类型名。这样,在重构时,就不会遗漏名称的改变:

C# 5

public void Method( object o )
{if( o  == null) throw new ArgumentNullException("o");
}

 C# 6

public void Method (object o)
{if(o == null) throw new ArgumentNullException (nameof(0));
}

7、 空值传播运算符

空值传播运算符简化了空值的检查:

C#  5

int? age = p == null ? null : p.Age;

 C# 6

int? age = p?.Age;

           新语法也有触发事件的优点:

           C# 5

var handler = Event;
if(handler != null)
{handler(source,e);
}

C# 6

handler?.Invoke(source,e);

8、字符串插值

字符串插值删除了对 string.Format的调用,它不在字符串中使用编号的格式占位符,占位符可以包含表达式:

C# 5

public override ToString()
{return string.Format("{0},{1}",Title,Publisher);
}

 C#  6

public override ToString() => $"{Title} {Publisher}";

9、字典初始化器

字典现在可以用字典初始化器来初始化,类似于集合初始化器。

C#  5

var dict = new Dictionary<int , string>();
dict.Add(3,"three");
dict.Add(7,"seven");

          C# 6

var dict = new Dictionary <int ,string>()
{[3] = "three",[7] = "seven"
}

10、异常过滤器

异常过滤器允许在捕获异常之前过滤他们。

C# 5

try
{//etc.
}
catch (MyException ex)
{if(ex.ErrorCode != 405) throw;
}

           C# 6

try
{//etc.
}
catch (MyExctption ex) when (ex.ErrorCode == 405)
{//etc.
}

新语法的优势是,它不仅减少了代码额的长度,而且没有改变堆栈跟踪 -------在 C# 5 中会改变堆栈跟踪。


11、Catch 中的 await

await 现在可以在catch子句中使用。C# 5需要一种变通方法:

C# 5

bool hasError = false;
string errorMessage = null;
try
{//etc.
}
catch (MyException ex)
{hasError = true;errorMessage = ex.Message;
}
if(hasError)
{await new MessageDialog().ShowAsync(errorMessage);
}

           C#  6

try
{//etc.
}
catch (MyException ex)
{await new MessageDialog().ShowAsync(ex.Message);
}

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#中的修饰符及其说明

主要修饰符修饰符应用于说明public所有类类型成员任何代码均可以访问该项protected类型和内嵌类型的修饰符只有派生的类型能访问该项internal所有类型或成员只能在包含它的程序集中访问该项private类型和内嵌类型的所有成员只能在它所属的类型中访问该项protected internal类型…

如何从iPhone / iPod Touch / iPad连接

如何从iPhone / iPod Touch / iPad连接 本文将介绍从iPhone / iPod Touch / iPad等设备连接到已启用L2TP over IPsec功能的PacketiX 服务器的方法。 操作前需要按照“在服务器上启用IPsec功能”的提示&#xff0c;在服务器端进行设置。如何增加一个连接设置 首先&#xff0c;你…

C# 中的 is 和 as 运算符 简单举例说明

假设有一个接口&#xff1a;IBankAccount&#xff1b;一个类SaverAccount&#xff0c;类SaverAccout继承自IBankAccount接口&#xff0c;如下图所示&#xff1a; public interface IBankAccount {public interface IBankAccount{void PayIn(decimal amount);bool Withdraw(dec…

ipad xcode连接不了iPad的。

今天是3月14号&#xff0c;也就是传说中的白色情人节。早上拿着ipad连接到电脑上&#xff0c;没想到xcode竟然识别不了。刚开始我以为是ipad也需要像iphone一样制作证书&#xff0c;于是我满怀期待的翻开教程开始制作证书。证书制作结束后&#xff0c;也把证书应用到手机和xcod…

C# partial 部分类使用简单举例说明

partial 关键字允许把类、结构、方法或者接口放在多个文件中。一般情况下&#xff0c;某种类型的代码生成器生成了一个类的某部分&#xff0c;所以把这类放在多个文件中是有益的。假定要给类添加一些从工具中自动生成的内容。如果重新运行该工具&#xff0c;前面所做的修改就会…

POJ 3250 Bad Hair Day【单调队列】

Description Some of Farmer JohnsNcows (1 ≤N≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows heads. Each cowihas a specified heig…

C#中 out、ref、params 修饰符使用方法

使用 out 关键字可以一个方法返回多个返回值。 int i; string str; bool b;public void MyReturnMethod(out int a, out string b,out bool c) {a 9;b "Hello";c false; }params 关键字可以把可变数量的参数(相同类型)作为单个逻辑参数传递给方法。 //返回一些do…

2012年3月编程语言排行榜:JavaScript超越Perl和Python

2012年3月编程语言排行榜&#xff1a;JavaScript超越Perl和Python TIOBE 于昨日公布了2012年3月编程语言指数排行榜。排名前三的语言是&#xff1a;Java、C 和 C#。 在本月排行榜中&#xff0c;JavaScript上升至第8位。由于网站越来越依赖JavaScript&#xff0c;因此JS的流行程…

C#从构造函数中调用其他构造函数

有时&#xff0c;在一个类中有几个构造函数&#xff0c;以容纳某些可选参数&#xff0c;这些构造函数包含一些共同的代码。例如&#xff0c;如下情况&#xff1a; Class Car {private string _description;private int _nWheels;public Car(string description,unit nWheels){_…

Unix整理笔记——安全性——里程碑M13

1 保护信息安全系统有三个基本原则&#xff1a; 机密性&#xff1a;必须阻止那些不需要知道的人了解信息 完整性&#xff1a;信息必须避免未授权的修改或污染 可用性&#xff1a;对那些需要访问信息的人&#xff0c;信息必须是可用的 2 根用户管理选项 sudo

ASP.NET MVC 多语言开发简单案例

首先&#xff0c;新建一个空的MVC项目&#xff0c;增加一个名叫Language的文件夹用于存放资源文件&#xff0c;如下图所示&#xff1a; 在Language文件夹中&#xff0c;增加两个资源文件&#xff0c;分别用于存储中文和英文&#xff0c;如下图所示&#xff1a; 如何添加资源文件…

iphone viewdidLoad运行以及参数的传递。

问题&#xff1a; 有三个view&#xff0c;他们之间传递一个NSArray *NodeArrayIPadLoginViewController----》VedioContainerViewController-----》IpadTreeViewTestController在 VedioContainerViewController的ViewDidLoad 中&#xff0c;若写成如下代码IpadTreeViewTestCont…

C#中使用NPIO实现导入导出Excel简单操作

本文介绍了在Winform中使用NPOI(PIO项目下的.Net组件)来操作Excel文件&#xff0c;而无需安装Office。 要实现的效果是这样的&#xff1a; 1、导出Excel&#xff1a;根据指定datatable&#xff0c;弹出导出窗口&#xff0c;用户自定义路径、导出名&#xff0c;然后导出。 2、…

3招seo技巧让你把关键词做进百度前三

这个技巧也没有什么&#xff0c;说白了就是个百度点击原理&#xff01;当然&#xff0c;这个标题也就是一个标题党&#xff0c;但是的确能让你的排名靠前&#xff0c;因为我之前测试过&#xff0c;我做过一个词&#xff0c;有10个人&#xff0c;点击一下&#xff0c;隔天就第一…

C#中采用OLEDB方式来读取EXCEL文件

使用OLEDB来读取EXCEL的原因很简单&#xff0c;只是因为我感觉代码量不多。代码已经本地测试通过。 public class OlEDBHelp {public DataSet ExcelToDataSet(string path,string tableName "table1"){DataSet ds new DataSet();string strConn string.Format($&q…

ASP.NET MVC 中删除无用视图引擎

默认情况下&#xff0c;ASP.NET MVC 同时支持 WebForm 和 Razor 引擎&#xff0c;而我们通常在同一个项目中只用到了一种视图引擎&#xff0c;如Razor&#xff0c;那么我们就移除没有使用的视图引擎&#xff0c;提高View视图的检索效率。在没有删除WebForm引擎之前&#xff0c;…

VRRP在生产环境中的应用

该案例是笔者做过的一个网络改造项目&#xff0c;同时为了保密只介绍VRRP方面的配置以及要注意的事项。 该方案时某医院核心网络&#xff0c;通过两台S8610走VRRP(和网关相连)。网络拓扑如下 S8610_1配置 en config hostname S8610_1 enable sec ******* line vty 0 4 pass ***…

隐藏ASP.NET MVC版本

默认情况下&#xff0c;ASP.NET MVC网站会把版本号提供给浏览器&#xff0c;如下图所示&#xff1a; 只需在Global.asax中添加一句代码即可&#xff1a; MvcHandler.DisableMvcResponseHeader true; 如下图所示&#xff1a; protected void Application_Start(){MvcHandler.…

使用纯索引子查询优化MySQL的分页查询速度

像这样的查询往往会耗费十几秒的时间 SELECT * FROM news WHERE cat_id 4 ORDER BY id DESC LIMIT150000, 10改进后 SELECT id, value, LENGTH(stuffing) AS len FROM t_limit ORDER BY id LIMIT 150000, 10仍然需要数秒, 但是, 如果将ID作为子查询 SELECT l.id, value, …

ASP.NET MVC 使用防伪造令牌来避免CSRF攻击

本文转自这篇文章 XSRF即在访问B站点的时候&#xff0c;执行了A站点的功能。 比如: A站点登录后&#xff0c;可以修改用户的邮箱&#xff08;接口&#xff1a;/Email/Modify?email123&#xff09;&#xff0c;修改邮箱时只验证用户有没有登录&#xff0c;而且登录信息是保存…