除非必要,否则如何不评估三元运算符的第三部分
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
因为唯一可用的索引是 0
和 1
.
如果您想要 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]);
对于我的程序,我需要以下代码行的功能。如果条件的计算结果为真,我需要表达式 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
因为唯一可用的索引是 0
和 1
.
如果您想要 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]);