C#如何检查两个值中的一个是否为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工作更快,更安全,因为在出​​现错误时不会抛出exception。 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" } 

要指明是否使用值“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")); 

这是一个类似的情况,但我正在检查三个或更多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(); 

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

假设staff.getValue("Male")staff.getValue("Female")的可能值恰好是那两个,那么简单的staff.getValue("Female")取( || )就足够了。 如果可能有任何其他返回值,包括null和空字符串,则必须检查exception

 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 }