if else 语句简化以提高可读性

Ree*_*saf 2 c#

我写了一个小片段来完成工作,但我想知道是否有任何方法可以使其更具可读性或紧凑性?

if (x && !y) var = 2;
else if (!x && y) var = 4;
else if (x && y) var = 24;
else if (!x && !y) var = 0;
SetStatus(true, var);
Run Code Online (Sandbox Code Playgroud)

can*_*on7 9

您可以做的第一件事是将这些案例重新排序为更合乎逻辑的内容:

if (x && y) result = 24;
else if (x && !y) result = 2;
else if (!x && y) result = 4;
else result = 0;
Run Code Online (Sandbox Code Playgroud)

你可以把它分解一下,按 x 分组:

if (x)
{
    if (y)
        result = 24;
    else
        result = 2;
}
else
{
    if (y)
        result = 4;
    else
        result = 0;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以将这些内部 if 折叠成三元组:

if (x)
{
    result = y ? 24 : 2;
}
else
{
    result = y ? 4 : 0;
}

Run Code Online (Sandbox Code Playgroud)

哎呀,如果您愿意,您可以将整个事情作为三元组进行:

result = x
    ? (y ? 24 : 2)
    : (y ? 4 : 0);
Run Code Online (Sandbox Code Playgroud)

您还可以使用 switch 表达式:

result = (x, y) switch
{
    (true, true) => 24,
    (true, false) => 2,
    (false, true) => 4,
    (false, false) => 0,
}
Run Code Online (Sandbox Code Playgroud)

“可读”有点主观:选择对你和你的团队来说可读的东西。

  • @Adrian 请友善点:我们来这里是为了提供帮助和建设性,互相称呼“荒谬”没有任何帮助:)我说“更紧凑(客观)或更优雅(主观)”,我的回答是““优雅”是主观的:选择您和您的团队可读的内容”(我注意到在我之前的评论之前它有部分错误,并修复了它) (3认同)
  • 让我们[在聊天中继续讨论](https://chat.stackoverflow.com/rooms/224970/discussion- Between-canton7-and-adrian)。 (3认同)
  • 我已经编辑了“优雅”的部分。如果您愿意,您也可以继续编辑答案。 (3认同)
  • @阿德里安不同意。问题是寻求更紧凑(客观)或更优雅(主观)的方法。可以通过突出显示 OP 可能不知道的 C# 语法区域来回答,并让他们决定哪个对他们来说更优雅。注意我的回答没有给出任何意见 (2认同)
  • @Adrian 不,无论它是否是主题,它在代码审查中绝对是偏离主题的。 (2认同)