我的功能类似于以下
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");
答案 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)];
}