首页 > 解决方案 > 避免嵌套 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.

先感谢您。

标签: c#anti-patterns

解决方案


健康)状况

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

推荐阅读