Подтвердить что ты не робот

Более эффективный оператор "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?

4b9b3361

Ответ 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))

Изменить: Исправлен порядок переменных для комментариев