5

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

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

4 回答 4

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";
于 2013-05-02T22:16:28.220 回答
3

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

不过,您可以使代码更简洁

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

}

或者,如果您感觉特别邪恶,请将其放在没有括号的一行上!:

return A?B?"W":"X":B?"Y":"Z";
于 2013-05-02T22:18:37.380 回答
0

你有四种可能的状态。更短(尽管不一定更容易维护)的表示将是

if (A && B) {
    return "W";
} else if (A && !B) {
    return "X";
} else if (!A && B) {
    return "Y";
else return "Z";
于 2013-05-02T22:17:16.930 回答
0

我只是为了好玩而把它扔进去:

    string Foo(bool A, bool B)
    {
        var labels = new[]{"W", "X", "Y", "Z"};
        return labels[(A ? 0 : 2) + (B ? 0 : 1)];
    }
于 2013-05-02T22:39:59.307 回答