簡體   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