避免嵌套 if/else if 以及在条件语句中同时避免 InvalidOperationException

Avoiding nesting if/else if as well as avoiding InvalidOperationException at the same time in a conditional statement

我遇到了这个庞大的方法,其中有很多 if else 类型的语句

else if (ptName == "Missile" ||
         ptName == "Telephone" ||
        (ptName.StartsWith("Car") && gasTank.ValueFloat1.Value < 90))
        {
         foo_1 = "some_string";
        }

不幸的是,这段代码并不完全正确,因为变量 gasTank 仅在 ptName 以字符串 "Car" 开头的情况下定义。因此,在运行时我得到

InvalidOperationException occured: Null object must have a value.

这可以通过嵌套 ifs 和 else ifs 以及重复条件 ptName.StartsWith("Car") 来解决,尽管这是非常不可取的。

将方法拆分为许多小方法或在每个条件后添加 return 不是一种选择,因为方法的 return 是各种 foo_i 的串联。

提前谢谢你。

条件

ptName.StartsWith("Car")

应该变成

ptName?.StartsWith("Car") ?? false

那将使您免于 null 价值。

如果你使用的C#版本低于6,那么你应该使用:

ptNAme == null ? false : ptName.StartsWith("Car")

另一个更新:

(gasTank.ValueFloat1?.Value ?? 0) < 90

(gasTank.ValueFloat1.HasValue ? gasTank.ValueFloat1.Value : 0) < 90