Превратить эту логику «если-то» в логическое выражение?

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

Это мой код:

                    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 должно быть установлено как не безработный.


person Earlz    schedule 11.07.2011    source источник
comment
Вы имеете в виду «type или d не безработный, но не оба»?   -  person svick    schedule 12.07.2011
comment
@svick: Да, это подтверждается логикой if-else в коде.   -  person Justin ᚅᚔᚈᚄᚒᚔ    schedule 12.07.2011
comment
@ Джастин, поэтому я и спросил. Ваш код говорит что-то другое, чем ваш текст, или, по крайней мере, неясно, что они означают одно и то же.   -  person svick    schedule 12.07.2011


Ответы (4)


Как насчет:

tmp.Unemployed = type.Unemployed == d.Unemployed;
person MRAB    schedule 11.07.2011
comment
А, теперь очевидно, что я думаю об этом. Просто нужна была еще одна пара глаз, я думаю - person Earlz; 12.07.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;
person Nick Dandoulakis    schedule 11.07.2011

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

isTmpUnemployed = (type.Unemployed == d.Unemployed);
tmp.Unemployed = isTmpUnemployed;
person Paul.s    schedule 11.07.2011

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

 tmp.Unemployed = ! ( D.Unemployed ^ type.Unemployed)
person Peter O.    schedule 11.07.2011