C # Как проверить, если одно из двух значений - ИСТИНА?

Должно быть простой вопрос для экспертов C # здесь.

Я в основном хочу проверить, является ли одно или другое значение ИСТИНОЙ, дикий удар в коде ниже:

if ((Boolean.Parse(staff.getValue("Male")) | Boolean.Parse(staff.getValue("Female")))    
{   
   // is true
}

Это правильно?

Спасибо

6
задан abatishchev 19 August 2010 в 08:09
поделиться

7 ответов

Если ТОЧНО ОДИН должен быть истинным, то это:

var male = bool.Parse(staff.getValue("Male"));
var female = bool.Parse(staff.getValue("Female"));

if (male ^ female)    
{
   //is true
}
17
ответ дан 8 December 2019 в 02:29
поделиться

Похоже, вы ищете логическое ИЛИ.

if(condition1 || condition2)
{
}
9
ответ дан 8 December 2019 в 02:29
поделиться

Используйте || (двойной канал), логическое ИЛИ.

bool isMale = Boolean.Parse(staff.getValue("Male");
bool isFemale = Boolean.Parse(staff.getValue("Female");
if (isMale || isFemale) // note double pipe ||
{
   // do something if true
}

В C # выражения операторов вычисляются слева направо. В операции ИЛИ второе выражение не будет оцениваться, если первое равно истине.

7
ответ дан 8 December 2019 в 02:29
поделиться

Оператор условного ИЛИ || - это то, что вам нужно

if ((Boolean.Parse(staff.getValue("Male")) || Boolean.Parse(staff.getValue("Female")))
{
   //is true
}

Если первое условие ИСТИНА , то второе условие не выполняется. Не проверено, так как результат явно вернет ИСТИНА .

4
ответ дан 8 December 2019 в 02:29
поделиться

Обратите внимание, что TryParse работает быстрее и безопаснее, чем просто Parse, потому что не выбрасывает исключение в случае ошибки. TryParse возвращает bool, который показывает, был ли разбор успешным или нет.

Поэтому оба метода парсинга должны возвращать true и только после этого делать главную проверку

bool male, female;
if ((Boolean.TryParse(staff.getValue("Male"), out male) && 
     Boolean.TryParse(staff.getValue("Female"), out female)) &&
    (male || female)) // or ^
{
    // do stuff
}

или

bool male, female;
if (Boolean.TryParse(staff.getValue("Male"), out male) &&
     Boolean.TryParse(staff.getValue("Female"), out female))        
{
    if(male) { }
    else if (female) { } // or just else
}
else
{
     // staff contains wrong data. Probably "yeap" instead of "true"
}
2
ответ дан 8 December 2019 в 02:29
поделиться

В любом случае необходима небольшая проверка исключений. Метод Boolean.Parse() получает строку в качестве аргумента и возвращает либо true либо false только если аргумент, очищенный от пробелов, равен "True" или "False" (обратите внимание на капитализацию). В ЛЮБОМ другом случае функция возвращает исключение.

Предположим, что возможными значениями staff.getValue("Male") и staff.getValue("Female") являются именно эти два, тогда достаточно простой дизъюнкции (||). Если возможно любое другое возвращаемое значение, включая null и пустую строку, то нужно проверить исключения

bool isMale;
try {
    isMale = Boolean.Parse(staff.getValue("Male"));
} catch(Exception e) {
    isMale = Boolean.False;
}
try {
    isFemale = Boolean.Parse(staff.getValue("Female"));
} catch(Exception e) {
    isFemale = Boolean.False;
}
if (isMale || isFemale) // note double pipe ||
{
    // do something if true
}

или сравнить вручную

bool isMale = Boolean.TrueValue == staff.getValue("Male");
bool isFemale = Boolean.TrueValue == staff.getValue("Female");
if (isMale || isFemale) // note double pipe ||
{
    // do something if true
}
-3
ответ дан 8 December 2019 в 02:29
поделиться

Чтобы указать, указан ли пол со значением «истина», а не «ложь»,

bool genderIsSpecified = staff.getValue("Male") | staff.getValue("Female");

.. будет определять только то, является ли это одним из этих значений, а не какое из этих значений объект staff есть.

Итак, на всякий случай, этот вопрос является буквальным, а не абстрактным примером ...

Мужчина или женщина ... каждый - один или другой. Возможно, в своем вопросе вы хотели спросить, какой из двух случаев? В этом случае

bool defaultGenderIfNoGenderDocumented = true; // male
bool MaleIfTrue_FemaleIfFalse = !string.IsNullOrEmpty(staff.getValue("Male"))
    ? bool.Parse(staff.getValue("Male"))
    : string.IsNullOrEmpty(staff.getValue("Female"))
        ? bool.Parse(staff.getValue("Female"))
            ? false
            : defaultGenderIfNoGenderDocumented
        : defaultGenderIfNoGenderDocumented;

Или просто

// assume value is properly populated, ignore "Female" value
bool isMale = bool.Parse(staff.getValue("Male")); 
0
ответ дан 8 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: