我理解outDTO is { CanInBound: true }
等价于outDTO !=null&&outDTO.CanInBound==true
但是当我写 outDTO ==null||outDTO.CanInBound==false
时,resharper提示合并成outDTO is not { CanInBound: true },我对这个提示感到疑惑,C#匹配模式中的not我该怎么去理解?
我写了一个单测,是可以进入判断的。但是还是有点懵逼,不知道该怎么去理解。
关于C#模式匹配 outDTO is not { CanInBound: true },这种方式的一点疑问
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-showbo 2021-08-26 16:19关注
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 变为了可用状态。解决 无用评论 打赏 举报
悬赏问题
- ¥15 WPF 大屏看板表格背景图片设置
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示