C#6.0

C#6.0

导入静态类

我们可以使用using static 命名空间.静态类来导入要使用的静态类,后续使用时就可以像本地类一样的使用了,例如:

//导入Math静态类
using static System.Math;

//使用时就不需要再指定命名空间了,可以直接类名.静态方法()来使用
int n = (int)Math.Ceiling(0.01m);

异常过滤器

异常过滤器可以让你在catch块执行之前先进行一个条件判断。

try
{
    using (HttpClient client = new HttpClient())
    {
        var response = await client.GetStringAsync("https://i.cnblogs.com/tags");
        Console.WriteLine(response);
    }
}
catch (System.Net.Http.HttpRequestException ex) when (ex.Message.Contains("401"))
{
    Console.WriteLine(ex.Message);
}

自动属性初始化

C#6.0之前是没办法给自动属性进行初始化,只能在对象创建成功后手动赋值。现在可以直接在自动属性后面加上初始值或初始化表达式。

private static int _defaultGender = 1;

//使用字面量设置初始值
public string Name { get; set; } = "张三";
//使用初始化表达式设置初始值
public string Gender { get; set; } = _defaultGender == 1 ? "男" : "女";

Null条件运算符

Null条件运算符使null检查更轻松、更流畅。将成员访问.替换为?.

Null合并运算符使结果为null时可以设置默认值。使用??

//如果person是null,则将变量name赋值为null,否则将Name的属性值赋值给该变量。
string name=person?.Name;

//如果姓名为null时则默认姓名为张三
string name = person?.Name ?? "张三";

字符串内插

字符串内插功能可以在字符串中嵌入表达式。使用$作为字符串的开头,并使用{}之间的表达式来计算结果。

string name = "张三";
string summary = $"hi,大家好,我叫:{name}..";

字符串内插就是语法糖,内部实际上是使用了string.Format方法。

nameof表达式

nameof表达式可生成变量、类型或成员的名称作为字符串常量。

nameof表达式在编译时进行求值,在运行时无效。

string name = "张三";
string summary = $"{nameof(name)}={name}";
//output:name=张三

Expression-bodied函数成员

之前只读属性和方法都是放在一个语句块中的,现在可以改成Expression-bodied成员。

//只读属性
public string Name => "张三";
//方法
public void Hello() => Console.WriteLine("hello world");
原文地址:https://www.cnblogs.com/yu_xing/p/csharp6.html