简化嵌套的IF语句

时间:2013-05-02 22:15:17

标签: 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";
        }
    }
}

双重筑巢对我来说错了。有没有更好的方法来实现这种模式?


谢谢大家的帮助,我最终走上了三路。它有助于扭转这一局面:

if (female)
{
    if (nutered)
    {
        destRow["TargetSex"] = "FS";
    }
    else
    {
        destRow["TargetSex"] = "F";
    }
}
else
{
    if (nutered)
    {
        destRow["TargetSex"] = "MN";
    }
    else
    {
        destRow["TargetSex"] = "M";
    }
}

进入此

destRow["TargetSex"] = female ? (nutered ? "FS" : "F")
                              : (nutered ? "MN" : "M");

4 个答案:

答案 0 :(得分:10)

if (A)
{
    return B ? "W" : "X";
}
return B ? "Y" : "Z";

甚至更简洁:

return A ? (B ? "W" : "X")  
         : (B ? "Y" : "Z");

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

if (A && B) return "W";
if (A && !B) return "X";
return B ? "Y" : "Z";

答案 1 :(得分:3)

逻辑上,没有。对于两个变量,您有4个不同的条件。

您可以使代码更简洁 ,但是:

string Foo(bool A, bool B)
{
    return A ? 
      B ? "W" : "X"
        :
      B ? "Y" : "Z";

}

或者,如果你感觉特别邪恶,那么就把它放在一条没有parens的行上!:

return A?B?"W":"X":B?"Y":"Z";

答案 2 :(得分:0)

你有四种可能的状态。

表示更短(但不一定更容易维护)的表示
if (A && B) {
    return "W";
} else if (A && !B) {
    return "X";
} else if (!A && B) {
    return "Y";
else return "Z";

答案 3 :(得分:0)

我只是为了好玩而扔掉它:

    string Foo(bool A, bool B)
    {
        var labels = new[]{"W", "X", "Y", "Z"};
        return labels[(A ? 0 : 2) + (B ? 0 : 1)];
    }