Лучший способ проверить несколько булевых условий в операторах c# if
у меня есть 3 логических значения в моем коде (C#) и int32
свойство, которое зависит от того, какие логические значения true
и false
.
Каков наилучший способ сделать это по-другому, чем если бы такие утверждения, как:
if(a && b && !c)
d = 1;
if(a && !b && !c)
d = 2;
//etc.. ect...
EDIT: 3 логических значения должны иметь все возможные комбинации для установки значения int32.
EDIT 2: значение " d " может быть одинаковым для двух разных булевых сравнений.
5 ответов
лучше захватить намерение операции, а не явно проверять логические значения.
например:
public void Check()
{
if (HasOrdered())
{
// do logic
}
}
private bool HasOrdered()
{
return a && !b && !c;
}
private bool HasBooked()
{
return a && b && !c;
}
Я думаю, что то, что вы делаете сейчас, прекрасно, и любые другие решения будут сводиться к предпочтениям.
мое предпочтение, где это применимо, было бы разделить проверки, если это возможно.
if (!a)
return;
if (!b)
return;
if (!c)
return;
Это было бы полезно в случае, если вам нужно проверить определенные предварительные условия Перед выдачей функции, например, если пользователь вошел в систему, если параметр существует и находится в правильном контексте вместе с другими элементами.
как я уже сказал, это может не относиться но я просто хотел высказать свое мнение
вы можете сделать подсказку таблицы поиска, данную @Adriano, предполагая, что у вас есть lookup_table
заполнено значениями для index [0..8):
var index = new [] { a,b,c }.Aggregate(0, (a,i) => return 2*a + (i?1:0));
int d = lookup_table[index];
редактировать редактирование вопроса сделало это неуместным:что означает d?
Если это количество ложных значений (возможно из примера кода), сделайте это
int d = new [] { a,b,c }.Count(b => !b);
Я ничего не вижу неправильно С тем, как вы это делаете, но если выход одинаковый для нескольких условий, вы мая можно упростить, если путем создания таблицы истинности и упрощения условий.
например, если d
должно быть 0
в любое время a
- "ложь" можно упростить до:
if(a)
if(b && !c)
d = 1;
if(!b && !c)
d = 2;
...
else
d = 0;
или если есть какой-то математический шаблон (например,a
, b
и c
представлять три цифры двоичного числа), то вы могли бы сделать бит арифметики.
Если, однако, у вас есть 8 distinct результатов (по одному для каждой комбинации a
, b
и c
), то ваш метод хорош.