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");