这对于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
}
这个正确吗?
谢谢
如果只有一个条件应该为真,则为:
var male = bool.Parse(staff.getValue("Male"));
var female = bool.Parse(staff.getValue("Female"));
if (male ^ female)
{
//is true
}
if(condition1 || condition2)
{
}
|
--虽然我同意通常最好使用短路||
版本。 - LukeH|
不是逻辑或运算符,而是位或运算符。 - MarkosBoolean
的变量,运算符|
是一个非短路逻辑或运算符。 - Gorpik|
计算其操作数的逻辑或。” http://msdn.microsoft.com/zh-cn/library/kxszd0kx.aspx - LukeH使用 ||
(双竖线)表示逻辑或。
bool isMale = Boolean.Parse(staff.getValue("Male");
bool isFemale = Boolean.Parse(staff.getValue("Female");
if (isMale || isFemale) // note double pipe ||
{
// do something if true
}
||
是你需要的。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"
}
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"));
这是一个类似的情况,但我正在检查三个或更多的布尔值。
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();
无论如何都需要一些异常检查。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
}
= Boolean.True == staff.getValue("Female") == true == true == true...... == true
。这有什么意义? - Michael ShimminsTryParse()
。如果发现null返回值只意味着将false赋给isMale或isFemale,那么只需使用null合并运算符"??". http://msdn.microsoft.com/en-us/library/ms173224.aspx。例如:`isMale = staff.getValue() ?? false;` - jloubertisMale = Boolean.TrueString == staff.getValue("Male")
而不是 isMale = Boolean.True == staff.getValue("Male)
。jloubert: 更好的写法是 Boolean.Parse(staff.getValue() ?? Boolean.FalseString)
(或者使用 TryParse)。 - rewritten