避免嵌套 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
我遇到了这个庞大的方法,其中有很多 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