【发布时间】:2019-05-13 12:00:13
【问题描述】:
我遇到了这个巨大的方法,我有很多 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 的串联。
提前谢谢你。
【问题讨论】:
-
通常 gasTank 不会被测试,除非 StartsWith("Car") 是真的.. 除非你有东西以 car 开头并且没有 gasTanks
-
C# 中的布尔运算符是短路的,如果左边的操作数足以获得值,则不应计算右边的操作数。您可能会遇到
ptName以Car开头但gasTank中没有ValueFloat1的情况。
标签: c# anti-patterns