关于C#模式匹配 outDTO is not { CanInBound: true },这种方式的一点疑问

我理解
outDTO is { CanInBound: true } 等价于outDTO !=null&&outDTO.CanInBound==true
但是当我写 outDTO ==null||outDTO.CanInBound==false时,resharper提示合并成outDTO is not { CanInBound: true },我对这个提示感到疑惑,C#匹配模式中的not我该怎么去理解?
我写了一个单测,是可以进入判断的。但是还是有点懵逼,不知道该怎么去理解。

img

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 变为了可用状态。

来源: C# 模式匹配 - 知乎 C# 模式匹配啥是模式匹配?模式匹配是一种高端的使用机制,它允许程序员在开发的时候以对象的类型作为条件筛选和分情况处理的一种手段。 虽说模式匹配(Pattern Matching)这个说法有些高端,不过我们依旧不必害怕… https://zhuanlan.zhihu.com/p/166631591