8

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

我基本上想检查一个值或另一个值是否为 TRUE,代码如下:

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

这个对吗?

谢谢

4

8 回答 8

18

如果 EXACTLY ONE 应该是真的,那么它是:

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

if (male ^ female)    
{
   //is true
}
于 2010-08-18T23:21:00.690 回答
9

听起来您正在寻找逻辑或。

if(condition1 || condition2)
{
}
于 2010-08-18T22:49:27.127 回答
7

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

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,则不会计算第二个表达式。

于 2010-08-18T22:48:52.530 回答
4

条件 OR 运算符||是您所需要的

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

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

于 2010-08-18T22:51:05.190 回答
2

请注意,它的TryParse工作速度更快,更安全,Parse因为在发生错误时不会引发异常。TryParse返回布尔值,指示解析是否成功。

所以这两种解析方法都应该返回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"
}
于 2010-08-19T08:16:41.700 回答
0

这是一个类似的场景,但我正在检查三个或更多布尔值。

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();
于 2012-10-09T14:32:05.407 回答
0

要指示是否使用“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")); 
于 2010-08-19T08:06:44.510 回答
-3

无论如何都需要一点异常检查。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
}
于 2010-08-18T23:11:40.900 回答