如果那么其他的速记不会在没有作业的情况下工作

时间:2012-02-21 00:08:25

标签: c# if-statement

在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():;

这是无效的,但却是我所追求的。

8 个答案:

答案 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变量,同时你试图改变变量的值