[英]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
。
請注意, 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"
}
這是類似的情況,但我正在檢查三個或更多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”(注意大小寫) 時才返回true
或false
。 在任何其他情況下,該函數返回異常。
假設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.