Для проверки нескольких свойств требуется одно - PullRequest
2 голосов
/ 03 августа 2020

Я ищу лучший способ решить следующий сценарий. Я не хочу сейчас использовать отражение и должен был поднять logi c на n-й уровень. Код должен быть простым C# без проверки атрибутов. Потому что это проверка внутреннего кода. Я хотел бы решить этот оператор, например XOR или аналогичный.

Сценарий:

У меня есть три поля (может быть 4, 5, nth) в классе. из трех пользователь должен выбрать только одно поле. если ничего не выбрано, выбрано два или более поля, нам нужно сгенерировать исключение.

Код:

// no type defined for item
if ( hasUserId==false
    && hasSigningGroup==false
    && hasAssignedAgent == false)
{
    throw new Exception("No type defined for item.");
}
else
{
    if ((hasSigningGroup && hasUserId)|| (hasSigningGroup && hasAssignedAgent)|| (hasUserId && hasAssignedAgent))
    {
        throw new Exception("User ID , Signing group or assigned agent. Only one property can be set.");
    }
}

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators Оператор логического исключающего ИЛИ ^

"Оператор ^ вычисляет логическое исключающее ИЛИ, также известное как логическое исключающее ИЛИ, для своих операндов. Результат x ^ y истинно, если x принимает значение true, а y принимает значение false, или x оценивается как false, а y оценивается как true. В противном случае результат равен false. То есть для операндов bool оператор ^ вычисляет тот же результат, что и оператор неравенства ! =. "

Вы также можете использовать! =.

Я считаю, что это именно то, что вы ищете.

Изменить: пример кода удален из-за логической ошибки. Ответ по-прежнему ^ или! = Как оператор XOR.

0 голосов
/ 04 августа 2020

Ребята, я нашел простой способ решить эту проблему. Это будет работать во всех случаях. Ни XOR, ни! = Не работали.

            int result = Convert.ToInt32(hasUserId) + Convert.ToInt32(hasSigningGroup) + Convert.ToInt32(hasAssignedAgent);

            if (result != 1)
            {
                throw new Exception("User ID , Signing group or assigned agent. Please set one property.");
            }

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...