微软于2015年7月21日发布了Visual Studio 2015, .NET 2015, .NET Framework 4.6, ASP.NET 4.6, Azure SDK 2.7 for .NET, C# 6.0, F# 4.0, TypeScript 1.5, Visual Studio Android 模拟器 等重量级开发产品。
由于项目升级到了.NetFramework 4.6.1,开发工具转向了VS2015,趁机尝试下C#6.0。结果网上的教程不进人意,许久都没有更新,只好自己做一下总结。
1.自动属性初始化(Auto-property initializers)
public class Account { public string Name { get; set; } = "summit"; public int Age { get; set; } = 22; public IList<int> AgeList { get; set; } = new List<int> { 10,20,30,40,50 }; }
对于只读属性也可以这样直接初始化(C#5.0不支持),也可以直接在构造函数里初始化
public class Customer { public string Name { get; } public Customer(string first, string last) { Name = first + " " + last; } }
2.字符串嵌入值(String interpolation)
在之前版本的String.Format中有多少个参数就要写多少个占位符还必须按照顺序,否则就报错.参数一多,这样搞的话确实头疼.新版本中在字符串前用$来标识后边的字符可以使用{对象}来作为占位符.看个例子.
Console.WriteLine($"年龄:{account.Age} 生日:{account.BirthDay.ToString("yyyy-MM-dd")}"); Console.WriteLine($"年龄:{account.Age}"); Console.WriteLine($"{(account.Age<=22?"小鲜肉":"老鲜肉")}");
如果想输出{或}符号,写两个即可,如$"{{".
注意这个$符号,网上的N多教程都是没有这个东东的.是直接"\{ account.Age \}",这种方式在新版本里已经被抛弃了.
3.导入静态类(Using Static)
像之前使用Math这个静态类的时候要先导入System命名空间后才能使用它.现在可以直接导入这个静态,然后代码中直接使用其函数.
using static System.Math;//注意这里不是命名空间哦 Console.WriteLine($"之前的使用方式: {Math.Pow(4, 2)}"); Console.WriteLine($"导入后可直接使用方法: {Pow(4,2)}");
注意这里是using static ...
如果某个命名空间下有n个方法,用这种方式直接引入单个静态类而不用引用所有方法还是挺方便的.
4.空值运算符(Null-conditional operators)
之前写过无数个这样的判断代码
if (*** != null) { //不为null的操作 } return null;
现在使用可以简化这样方式.
var age = account.AgeList?[0].ToString(); Console.WriteLine("{0}", (person.list?.Count ?? 0));
如果account.AgeList为空则整个表达式返回空,否则后边的表达式的值.
5.对象初始化器(Index Initializers)
这种方式可以给字典或其他对象通过索引赋值初始化.
IDictionary<int, string> dict = new Dictionary<int, string>() { [1]="first", [2]="second" }; foreach(var dic in dict) { Console.WriteLine($"key: {dic.Key} value:{dic.Value}"); }
output:
key: 1 value:first
key: 2 value:second
6.异常过滤器(Exception filters)
private static bool Log(Exception e) { Console.WriteLine("log"); return true; } static void TestExceptionFilter() { try { Int32.Parse("s"); } catch (Exception e) when (Log(e)) { Console.WriteLine("catch"); return; } }
当when()里面返回的值不为true,将持续抛出异常,不会执行catch里面的方法.
7.nameof表达式 (nameof expressions)
在对方法参数进行检查时经常这样写:
private static void Add(Account account) { if (account == null) throw new ArgumentNullException("account"); }
如果某天参数的名字被修改了,下面的字符串很容易漏掉忘记修改.
使用nameof表达式后,编译的时候编译器将检查到有修改后自动导航与重构(-_-! 不知道翻译的对不对)
private static void Add(Account account) { if (account == null) throw new ArgumentNullException(nameof(account)); }
8.在cath和finally语句块里使用await(Await in catch and finally blocks)
c#5.0里是不支持这么写.
Resource res = null; try { res = await Resource.OpenAsync(…); // You could do this. … } catch(ResourceException e) { await Resource.LogAsync(res, e); // Now you can do this … } finally { if (res != null) await res.CloseAsync(); // … and this. }
9.在属性里使用Lambda表达式(Expression bodies on property-like function members)
public string Name =>string.Format("姓名: {0}", "summit"); public void Print() => Console.WriteLine(Name);
10.在方法成员上使用Lambda表达式
static int LambdaFunc(int x, int y) => x*y; public void Print() => Console.WriteLine(First + " " + Last);
关于C#6.0新增加的语言特性目前为止也就这么多.没有什么新功能,更多的是语法糖的改进.开发更舒服更快速.
本文向大家介绍C#6.0中你可能不知道的新特性总结,包括了C#6.0中你可能不知道的新特性总结的使用技巧和注意事项,需要的朋友参考一下 为什么写? 今天去上班的公交上,有朋友在张队(张善友)的微信群里,发了一个介绍C# 6.0新特性的视频,视频7分钟,加上本人英语实在太low,整体看下来是一脸懵逼的。 下班回到家里,打开这个视频,把视频中介绍的新特性用文档的形式记录下来,加深自己的印象,此处把我整
本文向大家介绍探秘C# 6.0 的新特性,包括了探秘C# 6.0 的新特性的使用技巧和注意事项,需要的朋友参考一下 C# 6.0 中的新特性 我们可以对这些新特性一个一个的进行讨论,而首先要列出 C# 6.0 中这些特性的一个清单 自动的属性初始化器 Auto Property Initializer 主构造器 Primary Consturctor 字典初始化器 Dictionary Initi
本文向大家介绍VS2015中C#版本6.0的新特性 你需要知道,包括了VS2015中C#版本6.0的新特性 你需要知道的使用技巧和注意事项,需要的朋友参考一下 本文列出个人感觉比较有用的几个新功能,供大家参考,具体内容如下 注意:这些新特性只能用于VS2015及更高版本,无法在VS2013、VS2010等低版本中使用。当然,如果你不喜欢这些新的特性,仍然可以继续使用原来的用法(所以说它是新的语法
本文向大家介绍Python 3.x 新特性及10大变化,包括了Python 3.x 新特性及10大变化的使用技巧和注意事项,需要的朋友参考一下 Python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3 Python之父Guido van Rossum谈到了Python 3.0的构思: 一直以来,除非要打破向后兼容性,否则很多缺陷和错误都无法修复。因此,Python 300
本文向大家介绍php7新特性的理解和比较总结,包括了php7新特性的理解和比较总结的使用技巧和注意事项,需要的朋友参考一下 1. null合并运算符(??) 语法: 如果变量存在且值不为NULL,它就会返回自身的值,否则返回它的第二个操作数. 2. define() 定义常量数组 3. 组合比较符(<=>) 组合比较符用于比较两个表达式.当$a小于、等于或大于$b时它分别返回-1、0或1. 比较的
在MFC类库上,没有做什么大的改进,只是增加了对微软的IntelliMouse(智能鼠标)的支持;对Developer Studio,则作了一些修改,增加了一些新特性,使其更易于使用。这些新特性包括: 自动化和宏功能 可使用Visual Basic脚本语言自动化一些重复性过程和工作。宏记录功能可以根据用户的操作自动生成宏操作序列。Visual Studio和它的组件都可以看作对象来处理,这意味着可