更高效的“如果'多个选项的声明

时间:2016-01-21 12:54:08

标签: c# if-statement

我想知道是否有人有一些想法可以使以下更短,更有效。我有3个下拉菜单,用户选择较低的年龄限制,年龄上限和性别。他们可以根据需要选择任意数量,甚至没有。然后我有一个if语句,它将根据他们选择的内容进行处理。假设l,u和g是传递的参数。

if((age > l && age < u && gender == g)
|| (age > l && age < u && g == null)
|| (age > l && u == null && g == null)
|| (age < u && gender == g && l == null)
|| (age < u ...etc etc)

有没有更好的方法来形成这个而不是乏味的if语句?

4 个答案:

答案 0 :(得分:65)

您可以通过为每个条件创建变量来使其更具可读性。

var lowerAgeLimitMet = (l == null || age > l);
var upperAgeLimitMet = (u == null || age < u);
var genderLimitMet = (g == null || gender == g);
if(lowerAgeLimitMet && upperAgeLimitMet && genderLimitMet)
{
    //Do work here
}

答案 1 :(得分:8)

这应该有效:

if((age > l || l == null) && (age < u || u == null) && (gender == g || g == null))
   ...

答案 2 :(得分:2)

lowerLimit定义为int.MinValueupperLimit定义为int.MaxValue,让g定为null

然后这将处理所有情况:

int lowerLimit;
if (!int.TryParse(dropdown.Text, out lowerLimit))
{
    lowerLimit = int.MinValue;
}
int upperLimit;
if (!int.TryParse(dropdown.Text, out upperLimit))
{
    upperLimit = int.MaxValue;
}
// Same checks for gender
if(age > lowerLimit  && age < upperLimit  && (g== null || gender == g))
{
    // Your code here
}

答案 3 :(得分:0)

如果我们正在玩代码高尔夫:

if (age > (l ?? int.MinValue) && age < (u ?? int.MaxValue) && gender == (g ?? gender))

编辑:修复每条评论的变量顺序