繁体   English   中英

C#如何检查两个值中的一个是否为TRUE?

[英]C# How do I check if one of two values is TRUE?

对于这里的C#专家来说应该是一个简单的问题。

我基本上想要检查一个值或另一个值是否为TRUE,代码的狂野刺戳如下:

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

它是否正确?

谢谢

如果确实一个应该是真的那么它是:

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

if (male ^ female)    
{
   //is true
}

听起来你正在寻找合乎逻辑的OR。

if(condition1 || condition2)
{
}

使用|| (双管),逻辑或。

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#语句中,表达式从左到右进行计算。 在OR运算中,如果第一个表达式等于true,则不会计算第二个表达式。

条件OR运算符|| 是你需要的

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

如果第一个条件为TRUE ,则不检查第二个条件,因为结果显然将返回TRUE

请注意, TryParseParse工作更快,更安全,因为在出​​现错误时不会抛出异常。 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"
}

这是类似的情况,但我正在检查三个或更多bool值。

Thread th = new Thread(() =>
                {
                    while (true)
                    {
                        bool allReadComplete = true;

                        foreach (IDataProvider provider in lstDataProviders)
                        {
                            provider.StartReading();

                            if (provider.FinishedReading)
                              allReadComplete = allReadComplete && provider.FinishedReading;
                            else
                              allReadComplete = provider.FinishedReading;
                        }

                        // to induce some context switching
                        Thread.Sleep(0);

                        if (allReadComplete)
                            break;
                    }

                    Console.WriteLine("Thread Exiting");

                });
            th.IsBackground = true;
            th.Start();

要指明是否使用值“true”而不是“false”指定了性别,

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")); 

无论如何都需要进行一些异常检查。 Boolean.Parse()方法获取一个字符串作为参数,并且只有当参数从空白中删除后等于“True”或“False”(注意大小写) 时才返回truefalse 在任何其他情况下,该函数返回异常。

假设staff.getValue("Male")staff.getValue("Female")的可能值恰好是那两个,那么简单的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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM