微软于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中10大新特性的应用和总结全部内容,希望文章能够帮你解决C#6.0中10大新特性的应用和总结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)