我理解outDTO is { CanInBound: true }
等价于outDTO !=null&&outDTO.CanInBound==true
但是当我写 outDTO ==null||outDTO.CanInBound==false
时,resharper提示合并成outDTO is not { CanInBound: true },我对这个提示感到疑惑,C#匹配模式中的not我该怎么去理解?
我写了一个单测,是可以进入判断的。但是还是有点懵逼,不知道该怎么去理解。
if(outDTO is not { CanInBound: true })
==》
if(!(outDTO is { CanInBound: true }))
not:判断取反
当我们要取反 is 判断的时候,我们不得不为其添加一个小括号,然后写一个取反运算符 !。这样太丑了,所以 C# 9 带来了一种简化写法:
if (o is not int i)
{
...;
}
这个写法稍微有点诡异,当然 not 我们能理解语义模型定义的位置,因为一般英语就习惯把 not 放中间。可是这个 i……
是的,这个地方有点麻烦。你不妨把它按照传统思维去理解它:
if (!(o is int i))
{
...;
}
...;
这样一写你就明白了,i 变量在是 int 的时候会有转换。但不是 int 的时候,这个大括号里是不允许使用 i 的;反之,出来之后,i 变为了可用状态。