If Then Else Shorthand Won';t无任务工作

本文关键字:任务 工作 Then Else Shorthand Won If | 更新日期: 2023-09-27 18:25:18

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

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

If Then Else Shorthand Won';t无任务工作

?:不是if/else的"简写",它是一个具有特定语义规则的特定运算符(条件运算符)。这些规则意味着它只能用作表达式,而不能用作语句。

关于返回:如果你只想"return if true",那么就这样编码:

if(condition) return [result];

不要试图使用条件运算符,因为它不是。

您需要将返回移动到三元运算之外。

return boolCondition ? toThisPlace() : 0 ; 

您的语句有问题。

代替

condition ? return here:return there;

正如你所发现的,它不会编译,而是进行

return condition ? here: there;

不,那是不可能的。return是一个语句;它不能是表达式的一部分,而这正是?:(三元运算符,而非逻辑控制语句)在其所有三个操作数中所期望的。你必须使用通常的形式。不过别担心,这是一件好事——从长远来看,它会让你的代码更可读。

三元运算符?:在C#中是有限的。在这种情况下,你可以做的是:

return condition ? here : there;

您需要以这种方式编写语句

return condition ? here : there;

答案是(取决于您的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一起使用的括号,这是我能想到的最好的:

if (i < a)
{
    i++;
}
else
{
    a++;
}

您的示例中的返回将是:

_ = boolCondition = return toThisPlace() : default; // this is horrible, don't do it

您的代码是可以的,唯一的问题是您正在读取条件下的i变量,同时您正在尝试更改变量的值