Превратить эту логику if-then в логическое выражение? - PullRequest
2 голосов
/ 12 июля 2011

У меня немного умопомрачительный подход к тому, чтобы сделать этот код более лаконичным (желательно одно булево выражение)

Это мой код:

                    if (d.Unemployed)
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = true;
                        }
                        else
                        {
                            tmp.Unemployed = false;
                        }
                    }
                    else
                    {
                        if (type.Unemployed)
                        {
                            tmp.Unemployed = false;
                        }
                        else
                        {
                            tmp.Unemployed = true;
                        }
                    }

По сути, дело в том,что если либо type, либо d не является безработным, то tmp должно быть установлено как не безработное.

Ответы [ 5 ]

13 голосов
/ 12 июля 2011

Как насчет:

tmp.Unemployed = type.Unemployed == d.Unemployed;
4 голосов
/ 12 июля 2011

Если мы построим таблицу истинности, следуя коду, мы получим

d  | type | tmp
---+------+----
1  |   1  |  1
---+------+----
1  |   0  |  0
----+-----+----
0  |   1  |  0
----+-----+----
0  |   0  |  1

Вышеуказанное эквивалентно отрицанию операции xor.

tmp = not (d xor type)

Если в языке нет оператора xor, мы можем использовать != для логических значений.

tmp = ! (d != type);
// or
tmp = d == type;
2 голосов
/ 12 июля 2011

Думая о том, сколько «мозгового пердения» это вызвало у вас, я подумал бы об использовании хорошо названной переменной, чтобы избежать повторного прохождения этого умственного процесса в будущем.Как то так:

isTmpUnemployed = (type.Unemployed == d.Unemployed);
tmp.Unemployed = isTmpUnemployed;
0 голосов
/ 12 июля 2011

Вышеприведенный код означает «оба безработные или оба не безработные». Таким образом, нет (A xor B):

 tmp.Unemployed = ! ( D.Unemployed ^ type.Unemployed)
0 голосов
/ 12 июля 2011
tmp.Unemployed = d.Unemployed || type.Unemployed ? !tmp.Unemployed : null;
...