我想知道是否有人有一些想法可以使以下更短,更有效。我有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语句?
答案 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.MinValue
,upperLimit
定义为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))
编辑:修复每条评论的变量顺序