使用?:运算符实现三个整数取最大值的方法无法运行,请问原因是什么?
问题原因
- 核心语法错误:C# 中
?:属于条件表达式,它的本质是计算并返回一个值,不属于可以单独作为一行执行的语句类型,你当前将整段三元表达式作为独立语句编写,没有接收它的返回值,不符合C#语法规范,编译器会直接报错。 - 逻辑漏洞:当前的判断条件仅覆盖了三个数严格大于另外两个的场景,出现两个数相等且均大于第三个数的情况时(比如
a = b = 5, c = 3),判断逻辑会走到最后一个分支返回c,结果不符合预期。
修正写法
写法1:直接用三元表达式赋值
利用三元表达式的返回值直接给变量赋值,符合语法规则:
public static int Max(int a, int b, int c) { int iResult = a >= b && a >= c ? a : b >= c ? b : c; return iResult; }
写法2:用if分支实现(可读性更高)
多参数判断更推荐用if分支,后续维护更方便:
public static int Max(int a, int b, int c) { int iResult = a; if (b > iResult) iResult = b; if (c > iResult) iResult = c; return iResult; }
内容的提问来源于stack exchange,提问作者Ruben Virtic
相关产品推荐
相关产品推荐

