[英]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.