简化嵌套的IF语句

Sco*_*ain 5 c# simplification

我有一个类似于以下的功能

string Foo(bool A, bool B)
{
    if(A)
    {
        if(B)
        {
            return "W";
        }
        else
        {
            return "X";
        }
    }
    else
    {
        if(B)
        {
            return "Y";
        }
        else
        {
            return "Z";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那双重嵌套对我来说是错误的.有没有更好的方法来实现这种模式?


谢谢大家的帮助,我最终走上了三路.它帮助改变了这个:

if (female)
{
    if (nutered)
    {
        destRow["TargetSex"] = "FS";
    }
    else
    {
        destRow["TargetSex"] = "F";
    }
}
else
{
    if (nutered)
    {
        destRow["TargetSex"] = "MN";
    }
    else
    {
        destRow["TargetSex"] = "M";
    }
}
Run Code Online (Sandbox Code Playgroud)

对此

destRow["TargetSex"] = female ? (nutered ? "FS" : "F")
                              : (nutered ? "MN" : "M");
Run Code Online (Sandbox Code Playgroud)

Ste*_*ler 10

if (A)
{
    return B ? "W" : "X";
}
return B ? "Y" : "Z";
Run Code Online (Sandbox Code Playgroud)

或者更简洁:

return A ? (B ? "W" : "X")  
         : (B ? "Y" : "Z");
Run Code Online (Sandbox Code Playgroud)

如果你选择完全没有条件的话:

if (A && B) return "W";
if (A && !B) return "X";
return B ? "Y" : "Z";
Run Code Online (Sandbox Code Playgroud)

  • 甚至可以做'返回A?(B?"W":"X"):( B?"Y":"Z")`. (2认同)
  • "更简洁"的解决方案是我最喜欢的解决方案. (2认同)
  • 当使用`甚至更简洁'的版本时,我喜欢将第一行末尾的冒号放在'A'后面的问号下面.在我看来,扫描最好的各种放置选项. (2认同)