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/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变量,同时您正在尝试更改变量的值