c# - 避免嵌套 if/else if 以及在条件语句中同时避免 InvalidOperationException
问题描述
我遇到了这个巨大的方法,其中我有很多 if else 类型的语句
else if (ptName == "Missile" ||
ptName == "Telephone" ||
(ptName.StartsWith("Car") && gasTank.ValueFloat1.Value < 90))
{
foo_1 = "some_string";
}
不幸的是,此代码并不完全正确,因为变量 gasTank 仅由 ptName 以字符串“Car”开头的情况定义。因此,在运行时我得到
发生 InvalidOperationException:Null 对象必须有值。
这可以通过嵌套 if 和 else if 以及重复条件来解决ptName.StartsWith("Car")
,尽管这是非常不可取的。
将方法拆分为许多小方法或在每个条件后添加 return 不是一种选择,因为方法的 return 是各种foo_i
.
先感谢您。
解决方案
健康)状况
ptName.StartsWith("Car")
应该成为
ptName?.StartsWith("Car") ?? false
那会让你失去null
价值。
如果您使用的是低于 6 的 C# 版本,那么您应该使用:
ptNAme == null ? false : ptName.StartsWith("Car")
另一个更新:
(gasTank.ValueFloat1?.Value ?? 0) < 90
或者
(gasTank.ValueFloat1.HasValue ? gasTank.ValueFloat1.Value : 0) < 90
推荐阅读
- javascript - 无法在 html 中添加徽标
- javascript - 使用蓝鸟图书馆取消承诺
- php - 如何在 PHP 的动态下拉列表中显示选定的值
- vue.js - Vuejs Gitlab页面空白,控制台说MIME类型不匹配,找不到css和js
- tensorflow - 为什么 tf.nn.relu 和 tf.nn.sigmoid 在这个自定义估计器中的工作方式相同
- python - Python打印功能不按顺序打印
- mysql - 如果 table2 中不存在行 ID 超过 x 次,如何从 table1 中选择一行
- html - 比较 html 中的布尔值未按预期工作
- python - 是否可以对多个图像使用 cv2.HoughCircles 函数?
- python - Groupby 和 sum 几列 pandas