除非必要,否则如何不评估三元运算符的第三部分

How to not evaluate the third part of a ternary operator unless necessary

对于我的程序,我需要以下代码行的功能。如果条件的计算结果为真,我需要表达式 if false 因为 System.IndexOutOfRangeException 而不会被计算。有什么办法可以实现吗?

Bobject VARvalue = (args.Length < 2) ? Zero : new Bobject(args[2]);

编辑:我没有具体说明这条线的目标。目标是检查代码中是否存在 args[2],如果不存在,则为变量设置不同的值,因为 args[2] 会抛出异常。

要使您的条件为假,args.Length 必须等于 2 或更大。

如果是 2,访问 args[2] 将抛出 IndexOutOfRangeException 因为唯一可用的索引是 01.

如果您想要 args 数组中的 SECOND 项,则必须传入 1 的索引,因为数组索引是从零开始的。 Bobject VARvalue = (args.Length < 2) ? Zero : new Bobject(args[1]);

或者至少将您的条件修改为args.Length <= 2。我不太确定哪个会解决您的具体目标,但希望这能让您朝着正确的方向前进。

数组是从 0 开始的,所以第二个项目在索引 1,而不是 2:

Bobject VARvalue = (args.Length < 2) ? Zero : new Bobject(args[1]);