Более эффективный оператор "if" для нескольких параметров
Интересно, есть ли у кого-нибудь идеи сделать следующие более короткие и эффективные. У меня есть 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?
Ответы
Ответ 1
Вы можете сделать его более читаемым, создав переменную для каждого условия.
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
}
Ответ 2
Это должно работать:
if((age > l || l == null) && (age < u || u == null) && (gender == g || g == null))
...
Ответ 3
Определите 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
}
Ответ 4
Если мы играем в код golf:
if (age > (l ?? int.MinValue) && age < (u ?? int.MaxValue) && gender == (g ?? gender))
Изменить: Исправлен порядок переменных для комментариев