多个选项的更有效的“if”语句

本文关键字:if 语句 选项 有效 | 更新日期: 2023-09-27 18:31:27

我想知道是否有人有一些想法可以使以下内容更短,更高效。我有 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语句?

多个选项的更有效的“if”语句

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

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
}

这应该有效:

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

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
}

如果我们在打代码高尔夫:

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

编辑:固定每条评论的可变顺序