【c#】6.0与7.0新特性介绍记录
c#发展史
引用地址:https://www.cnblogs.com/ShaYeBlog/p/3661424.html
6.0新特性
1.字符串拼接优化
语法格式:$”string {参数}”
解释:以$符号开头开始字符串,其中以{}来进行传参,可以多个参数累加
例如:var results = $"Hello {Name}";
2.null检测运算符
语法格式:【 ?.】
解释:需要判断的对象值后面跟随?号符号直接进行判断是否为空,然后条件不为空后需要执行的在“.”之后执行
例如:
Program pro = new Program(); Console.WriteLine(pro?.GetCnblogsSite()); public string GetCnblogsSite() { return "http://www.cnblogs.com/yanbigfeg"; }
3.自动化属性
语法格式:attribute{get;set}="";
解释:对象属性后面直接可以进行赋值操作。像普通赋值一样。
例如:public string name {get;set}=“张三”;
4.表达式方法体
语法格式:=》
解释:一句话的那种方法体,可以使用箭头函数,不需要大括号,更加简便
例如: public ActionResult index ()=> View();
5.引用静态类
解释:可以直接引用静态类
例如:using static System.Math;
6.带索引的对象初始化器
解释:就是形如字典那种形式可以直接通过索引初始化
例如:var dic = new Dictionary<int, string> { [0]="第一个值",[1]= "第二个值"};
7.catch和finally 中使用await
解释:在5.0中await是不能在catch和finnaly块中使用的,在6.0移除了此限制。
8.out参数写法
例如:int.TryParse("123", out int x); 可以直接用的时候才定义
9.结构体可以包含无参函数
解释:在以前结构体是不可以包含显式的无参构造函数的,现在可以了
7.0新特性
1.元组
语法格式:Tuple
解释:可以创建不同的类型到一个集合中,然后进行返回,返回使用Item1,Item2....你以为就是这些东西吗,错了然这是4.0的东西了,现在7.0又给我们进行了优化。不过需要引用System.ValueTuple
例如:
static void Main(string[] args) { var data=GetFullName(); Console.WriteLine(data.a); //可用命名获取到值 Console.WriteLine(data.b); Console.WriteLine(data.c); Console.ReadLine(); } //方法定义为多个返回值,并命名 private static (string a,string b,string c) GetFullName() { return ("a","b","c"); }
又例如:
static void Main(string[] args) { //定义解构元组 (string a, string b, string c) = GetFullName(); Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.ReadLine(); } private static (string a,string b,string c) GetFullName() { return ("a","b","c"); }
在补充一下原写法形式
//元组数据创建 public Tuple<int, string> GetTuple() { return Tuple.Create(1, "001"); } //获取元组值 var result = GetTuple(); Console.WriteLine(result.Item1); Console.WriteLine(result.Item2);
2.匹配模式
2.1针对is的小扩展
格式:a is type b
解释:参数a是不是这个类型如果是就赋值给b然后在使用b做操作
例如:object a = 1;if (a is int c)Console.WriteLine(c);
2.2switch的小扩展
格式 :case type a: 以及筛选值的case type a when a<0:
解释:case可以针对类型进行匹配和根据类型匹配后在进行条件筛选
3.ref的改动
解释:ref在以前只是用作于参数,在7.0中ref可以作为本地变量和返回值使用。
4.局部函数
解释:与局部变量类似,只在特定的函数中可以访问的函数。有点类似于func委托的感觉可以在内部定义一个局部方法临时使用,具体区别还没搞清除。
int a = 1; int add(int c) { return c + 1; } Console.WriteLine(add(a));
5.表达式方法体扩展
解释:在6.0中一句话方法可以简写,但是构造函数,析构函数,属性访问器不可以,在7.0对此进行了扩展
例如:
// 构造函数的表达式写法 public CaCheContext(string label) => this.Label = label; // 析构函数的表达式写法 ~CaCheContext() => Console.Error.WriteLine("Finalized!"); private string label; // Get/Set属性访问器的表达式写法 public string Label { get => label; set => this.label = value ?? "Default label"; }
6.数值文字语法改进
格式:_
解释:运行数值中间使用“_”分割符,完全是为了可读性。没有其他实际意义。
作者:YanBigFeg —— 颜秉锋
出处:http://www.cnblogs.com/yanbigfeg
本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Apktool回编译APK变大原因--关于apktool.yml的可压缩文件配置
1.背景 为了实现apk字节码加密技术,我在CI上通过插入了脚本重新打包任务。然而,这改动导致apktool回编译apk包变大,文件经调研和分析发现:在apktool 2.0.3之后为了快速解压和打包,加入了反编译文件回编译不压缩机制。该配置文件位于apktool.yml文件中。 1-1 反编译产物 1-2 apktool.yml详情 几乎所有的二进制和非二进制文件打包时都未采用压缩,导致生成的apk变大(即使未签名依然比原apk大),最后在回编过程进行分析。 在反编译文件中查看yml文件,该文件记录了apk反编译信息(见apktool源码brut/androlib/meta/MetaInfo)compressionType:记录arsc的是否压缩doNotCompress:记录不压缩的文件类型和路径 2.解法 由于最新版本的apktool回编采用了不压缩的策略,导致我们的重编译apk变大。 可以想到的有两种方法: 1.通过apktool高版本来释放1.apk(framworks apk见上次分享),低版本处理反编译和打包的问题。 2.通过脚本将apktool.yml文件进行修改和定制...
- 下一篇
VISTA 与输入法程式介面
原文:VISTA 与输入法程式介面 VISTA与输入法程式介面 文/黄忠成 近日,我所兼职顾问的公司开始将旧有的 Win32 程式及新开发的 .NET 应用程式移转到 VISTA 系统上测试,由于我们的应用程式多半是商用套装软体, 相当然尔对于以程式切换输入法的需求是一定存在的,对于客户来说,在焦点移往该输入中文的栏位时,由系统自动为其切换适当的输入法是种便利的设计! 只是这些原本在 Windows XP/2000/2003 上运作的相当正常的程式,到了 VISTA 后,却不约而同出现了同样的问题,那就是自动切换输入法的功能全部失效了, 这不只出现在旧有的 Win32 应用程式,连新开发的 .NET Framework 2.0 应用程式也无法幸免!当工程师们向我询问关于此问题的解决办法时,我直觉的认为, 这可能是 VISTA 在输入法的程式介面上做了变动,也就是旧有的 API 已经失去功能,由另外一种介面来取代了!只是,我毫无头绪,不知该如何去找出这个 新介面是什么,更别谈说提出一个可以解决此问题的办法了。我与多数设计师一样,立刻就打开 google ,企图在搜寻引擎上找到一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题