VS2015中C#版本6.0的新特性
[z]http://www.cnblogs.com/xszjk/articles/6417173.html
[z]https://www.cnblogs.com/qixu/p/6047229.html
注意:这些新特性只能用于VS2015及更高版本,无法在VS2013、VS2010等低版本中使用。当然,如果你不喜欢这些新的特性,仍然可以继续使用原来的用法(所以说它是新的语法糖)。
1、自动属性初始化的改进(有用)
原来的用法(声明时无法同时初始化),例如:
|
1
2
3
4
5
6
7
8
9
10
|
class MyClass{ public int Age { get; set; } public string Name { get; set; } public MyClass() { Age = 20; Name = "张三"; }} |
新用法(声明时可同时初始化,更方便了),例如:
|
1
2
3
4
5
|
class MyClass{ public int Age { get; set; } = 20; public string Name { get; set; } = "张三";} |
2、String.Format的改进(有用)
原来的用法:用string.Format(…)实现,例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class MyClass{ public void MyMethod() { string name = "张三"; int age = 20; string s1 = string.Format("{0},{1}", name, age); string s2 = string.Format("姓名={0},年龄={1}", name, age); string s3 = string.Format("{0,15},{1:d3}", name, age); string s4 = string.Format("{0,15},{1,10:d3}", name, age); Console.WriteLine("{0},{1},{2},{3}", s1, s2, s3 ,s4); string s5 = string.Format("{0:yyyy-MM-dd}", DateTime.Now); }} |
新用法:用“$”前缀实现(变量直接写到大括号内,而且带智能提示,更方便了),例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class MyClass{ public void MyMethod() { string name = "张三"; int age = 20; string s1 = $"{name},{age}"; string s2 = $"姓名={name},年龄={age}"; string s3 = $"{name,15},{age:d3}"; string s4 = $"{name,15},{age,10:d3}"; Console.WriteLine($"{s1},{s2},{s3},{s4}"); string s5 = $"{DateTime.Now:yyyy-MM-dd}"; }} |
3、字典的初始化
原来的用法:
|
1
2
3
4
5
6
7
8
9
10
|
class MyClass{ public void MyMethod() { Dictionary<string, int> student = new Dictionary<string, int>(); student.Add("a1", 15); student.Add("a2", 14); student.Add("a3", 16); }} |
新用法(可以直接写初始化的值,更方便了):
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class MyClass{ public void MyMethod() { Dictionary<string, int> student = new Dictionary<string, int>() { ["a1"] = 15, ["a2"] = 14, ["a3"] = 16 }; }} |
4、可以用static声明静态类的引用
原来的用法:
|
1
2
3
4
5
6
7
8
9
10
11
|
using System;namespace MyApp{ class Demo1New { public static double MyMethod(double x, double angle) { return Math.Sin(x) + Math.Cos(angle); } }} |
新用法(表达式比较复杂的时候有用,代码更简洁了):
|
1
2
3
4
5
6
7
8
9
10
11
|
using static System.Math;namespace MyApp{ class Demo1New { public static double MyMethod(double x, double angle) { return Sin(x) + Cos(angle); } }} |
5、nameof表达式
假定WPF应用程序中有下面的类:
|
1
2
3
4
5
6
|
public class MyClass { public string MyText { get; set; } = "aaa"; } |
并假定有下面的XAML代码:
<StackPanel>
<TextBlock Name="txt1"/>
……
</StackPanel>
代码隐藏类中原来的用法:
txt1.SetBinding(TextBlock.TextProperty, "MyText");
现在的用法(因为有错误检查智能提示,用起来更方便了):
txt1.SetBinding(TextBlock.TextProperty, nameof(MyClass.MyText));
6、Null-条件表达式
(有用)
|
1
2
3
4
|
var ss = new string[] { "Foo", null };var length0 = ss [0]?.Length; // 结果为3var length1 = ss [1]?.Length; // 结果为nullvar lengths = ss.Select (s => s?.Length ?? 0); //结果为[3, 0] |
7、在try-catch-finally中使用await
异步编程中,原来在catch或者finally中无法使用await,现在可以了:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
async void SomeMethod(){ try { //...etc... } catch (Exception x) { var diagnosticData = await GenerateDiagnosticsAsync (x); Logger.log (diagnosticData); } finally { await someObject.FinalizeAsync(); }} |
在C#中??和?分别是什么意思?
1. 可空类型修饰符(?):
引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。
例如:string str=null; 是正确的,int i=null; 编译器就会报错。
为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?"
例如:int? 表示可空的整形,DateTime? 表示可为空的时间。
T? 其实是System.Nullable(泛型结构)的缩写形式,也就意味着当你用到T?时编译器编译 时会把T?编译成System.Nullable的形式。
例如:int?,编译后便是System.Nullable的形式。 2. 三元(运算符)表达式(?:):
例如:x?y:z 表示如果表达式x为true,则返回y;如果x为false,则返回z,是省略if{}else{}的简单形式。 3. 空合并运算符(??):
用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。
例如:a??b 当a为null时则返回b,a不为null时则返回a本身。
空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。
VS2015中C#版本6.0的新特性的更多相关文章
- 关于pycharm中pip版本10.0无法使用的解决办法
背景: 近期在利用 pycharm 安装第三方库时会提示 pip 不是最新版本, 因此对 pip 进行更新,但是生成最新版本之后, pip 中由于缺少 main 函数,导致在 pycharm 中无法自 ...
- paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较
paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较 PHP5的新特性 2 · 对象的参照过渡是默认的(default) 3 · 引入访问属性的限制 3 · 引入访问方法的限 ...
- Atitit jquery 1.4--v1.11 v1.12 v2.0 3.0 的新特性
Atitit jquery 1.4--v1.11 v1.12 v2.0 3.0 的新特性 1.1. Jquery1.12 jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.h ...
- C# 6.0/7.0 的新特性
转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...
- C# 8.0 的新特性概览和讲解
本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...
- (数据科学学习手札111)geopandas 0.9.0重要新特性一览
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...
- php5.3到php7.0.x新特性介绍
<?php /*php5.3*/ echo '<hr>'; const MYTT = 'aaa'; #print_r(get_defined_constants()); /* 5.4 ...
- 相比于python2.6,python3.0的新特性。
这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...
- xmake v2.1.5版本正式发布,大量新特性更新
此版本带来了大量新特性更新,具体详见:xmake v2.1.5版本新特性介绍. 更多使用说明,请阅读:文档手册. 项目源码:Github, Gitee. 新特性 #83: 添加 add_csnippe ...
随机推荐
- php运行代码流程和性能优化方法
---恢复内容开始--- php文件->扫描->zd引擎去理解->opcodes->执行->输出 例子,用white随机循环20000数据进行性能测试,分别对比isset ...
- Python 3 学习笔记(3)
模块 编写模块 # fibo.py # Fibonacci numbers module def fib(n): # write Fibonacci series up to n a, b = 0, ...
- Matlab实现BP网络识别字母
训练样本空间 每个样本使用5×5的二值矩阵表征一个字母.一共10个字母类型,分别是N,I,L,H,T,C,E,F,Z,V.每个字母9个样本.共90个. N1=[1,0,0,0,1; 1,0,0,0 ...
- ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画
ArcGIS案例学习笔记4_2_城乡规划容积率计算和建筑景观三维动画 概述 计划时间:第4天下午 目的:城市规划容积率计算和建筑三维景观动画 教程: pdf page578 数据:实验数据\Chp13 ...
- C++ 将数据转为字符串的几种方法
收集一下: 1\将int 转为 LPCTSTR 其实LPCTSTR可以直接使用CString直接代替,无需类型强制转换 CString str; ; //str="15" str. ...
- Oracle登录后提示ORA-12154:TNS:无法解析指定的连接标识符
下午重装系统,安装Oracle,设置了首选项的Oracle主目录名和OCI库,但还是提示ORA-12154:TNS:无法解析指定的连接标识符 纠结了好久,发现刚装系统没设置Oacle数据库的系统环境变 ...
- Python基础学习Day6 is id == 区别,代码块,小数据池 ---->>编码
一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...
- 游戏编程模式KeyNote
[游戏编程模式KeyNote] 1.命令模式. 重做在游戏中并不常见,但重放常见.一种简单的重放实现是记录游戏每帧的状态,这样它可以回放,但那会消耗太多的内存.相反,很多游戏记录每个实体每帧运行的命令 ...
- Unity3D中的Quality
Quality Level:质量等级,默认为打包最低的那个等级 Name:质量级别的名称 Pixel Light Count:像素灯数量(前向渲染使用的像素灯的最大数量) Texture Qualit ...
- Python基础之Python的变量、常量
变量 看下面这个输出 print('整数达斯柯达敬爱的卡斯加大受打击啊') 变量:就是将运算的中间结果暂时存到内存中,以便后续代码调用 res = '整数达斯柯达敬爱的卡斯加大受打击啊') print ...