在C#中,我试图缩短一些返回代码。我想做的是像
condition ? return here:return there;
或
condition ?? return here;
我遇到了一些问题,编译器说表达式无效。这是一个例子:
int i = 1;
int a = 2;
i < a ? i++ : a++;
这是无效的。然而,
int i = 1;
int a = 2;
int s = i < a ? i++ : a++;
有效。是否必须使用此速记符号进行分配?我现在能想到的唯一方法就是:
int acceptReturn = boolCondition ? return toThisPlace() : 0 ;
我真的希望这行代码看起来更像:
boolCondition ? return toThisPlace():;
这是无效的,但却是我所追求的。
答案 0 :(得分:14)
? :不是if / else的“简写” - 它是具有特定语义规则的特定运算符(条件)。这些规则意味着它只能用作表达式,而不能用作语句。
返回:如果你只想“返回if true”,那么就这样编码:
if(condition) return [result];
不要尝试使用条件运算符,因为它不是。
答案 1 :(得分:3)
您需要将回报移到三元操作之外。
return boolCondition ? toThisPlace() : 0 ;
答案 2 :(得分:2)
你的陈述无序。
而不是
condition ? return here:return there;
,正如您所发现的那样,无法编译,请执行
return condition ? here: there;
答案 3 :(得分:2)
不,那是不可能的。 return
是一份声明;它不能成为表达式的一部分,这就是?:
三元运算符(不是逻辑控制语句)所期望的所有三个操作数。你必须使用通常的形式。不过不用担心,这是一件好事 - 从长远来看,它会让你的代码更具可读性。
答案 4 :(得分:2)
三元运算符?:
受限于C#。在这种情况下你可以做的是:
return condition ? here : there;
答案 5 :(得分:1)
你需要以这种方式写你的陈述
return condition ? here : there;
答案 6 :(得分:0)
答案是(取决于您的C#版本和需求):
return condition ? here : there;
return here ?? there; // if you want there when here is null
return boolCondition ? toThisPlace() : default;
return boolCondition ? toThisPlace() : default(int);
return boolCondition ? toThisPlace() : 0;
现在,您可以将结果分配给下划线'_'变量,该变量将被忽略:
_ = i < a ? i++ : a++;
这是我能想到的最好的方法,如果您真的想避免if,else和其他某些团队强制使用的方括号,则是这样的,
if (i < a)
{
i++;
}
else
{
a++;
}
您的示例的返回值为:
_ = boolCondition = return toThisPlace() : default; // this is horrible, don't do it
答案 7 :(得分:-2)
你的代码没问题,唯一的问题是你在条件下读取i变量,同时你试图改变变量的值