对于这里的 C# 专家来说应该是一个简单的问题。
我基本上想检查一个值或另一个值是否为 TRUE,代码如下:
if ((Boolean.Parse(staff.getValue("Male")) | Boolean.Parse(staff.getValue("Female")))
{
// is true
}
这个对吗?
谢谢
对于这里的 C# 专家来说应该是一个简单的问题。
我基本上想检查一个值或另一个值是否为 TRUE,代码如下:
if ((Boolean.Parse(staff.getValue("Male")) | Boolean.Parse(staff.getValue("Female")))
{
// is true
}
这个对吗?
谢谢
如果 EXACTLY ONE 应该是真的,那么它是:
var male = bool.Parse(staff.getValue("Male"));
var female = bool.Parse(staff.getValue("Female"));
if (male ^ female)
{
//is true
}
听起来您正在寻找逻辑或。
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
返回布尔值,指示解析是否成功。
所以这两种解析方法都应该返回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"
}
这是一个类似的场景,但我正在检查三个或更多布尔值。
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")
这两个,那么简单的析取 ( ||
) 就足够了。如果任何其他返回值是可能的,包括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
}