son["y"]);
}
return null;
}
如果null 那么null
如果不null 那么执行
我们也可以连环地使用问点运算符 ,简化后如下:
//finally
public static Point FromJson2(JObject json)
{
if (json?["x"]?.Type == JTokenType.Integer &&
json?["y"]?.Type == JTokenType.Integer)
{
return new Point((int)json["x"], (int)json["y"]);
}
return null;
}
这样,这个if条件就只表达你的核心意图,而不用花太多的代码再null判断上。
Null条件运算符对触发时间非常有用,如
OnChanged?.Invoke(this,arg)
而不用在单独去判断委托是否为空,当委托不为空时,执行右边的Invoke()方法。
7.Nameof运算符
很多情况下,我们需要以运算符的形式获取程序元素的名称,Nameof运算符然我们获取元素名称的字符串,知道元素到底指的是什么,是哪些元素,并确保它确实存在。
public void Add(Point point)
{
if(point==null)
throw new ArgumentNullException(nameof(point));
}
8.异常塞选器
异常塞选器可以让catch在捕获异常之前对异常进行筛选,如果异常符合我们的要求,则进行捕获,异常筛选如下:
try
{
...
}
catch (ConfigurationException e)when (e.IsSevere)
{
...
}
9.在catch和finally中使用await
越来越多的api采用异步的方式,现在我们也总算可以在catch和finally中调用它们了。