我有一个包含TRUE或FALSE或null值的字符串,这个值是从我无法控制的文本文件中读取的。什么是使用'|'的最佳方式用'if'?请记住strValue也可以为null,如果strValue为null,那么我不想输入if语句。
if (strValue == "FALSE" | strValue == "TRUE")
{
//do stuff
}
由于
答案 0 :(得分:20)
if (strValue == "FALSE" || strValue == "TRUE") {
// ...
}
受益于短路。如果第一个表达式求值为true
,则不会尝试第二个表达式。
如果您需要不区分大小写的比较:
if ("FALSE".Equals(strValue, StringComparison.InvariantCultureIgnoreCase) ||
"TRUE".Equals(strValue, StringComparison.InvariantCultureIgnoreCase)) {
// ...
}
请注意,在.ToUpper()
上调用.ToLower()
或null
会抛出NullReferenceException
。
答案 1 :(得分:4)
从你的问题来看,听起来你真正关心的是字符串是非空的。然后你有两个选择:
if (!string.IsNullOrEmpty(strValue))
{
//Do stuff with "TRUE" or "FALSE"
}
或者,如果你知道它永远不会是一个空字符串(“”):
if (strValue != null)
{
//Do stuff with "TRUE" or "FALSE"
}
我会推荐第一个选择。
答案 2 :(得分:2)
我会认真考虑使用ToUpper
,如果它不受您的控制 - 您永远不会知道有人将其更改为"True"
或"true"
。
if (strValue.ToUpper() == "FALSE" || strValue.ToUpper() == "TRUE") {
}
关于ToUpper
和不必要的防御性编程的回答:
原始问题说“从我无法控制的文本文件中读取”,“TRUE或FALSE或null”。据我所知,没有通用的方法在文本文件中指示NULL。在CSV文件中,您可以将,,
视为NULL
或""
(空字符串)。在固定宽度的文本文件中,您可以将所有空格视为NULL
,""
或"<some spaces>"
。
所以OP已经做了一些数据转换/解释来达到这一点。
答案 3 :(得分:1)
或者也许:
if (strValue == "FALSE") {
// do stuff
} else if (strValue == "TRUE") {
// do other stuff
} else {
// strValue was NULL or invalid.
}
视您的需要而定。
答案 4 :(得分:1)
您可以将所有这些内容放入单个if语句中:
if (!string.IsNullOrEmpty(strValue) && (strValue == "TRUE" || strValue == "FALSE")
{
//do stuff
}
首先评估第一个条件,然后评估其他条件。我更喜欢使用显式空检查,以帮助其他可能缺乏经验的开发人员理解代码。
答案 5 :(得分:0)
如果strValue为null,那么我不想输入if语句
如果那个确实是,那你为什么担心“|” (按位或)运算符。
你可以写:
if (strValue != "NULL")
{
}
你可能的意思是使用(逻辑或)运算符“||”关于真或假的价值观。
if (strValue == "TRUE" || strValue == "FALSE")
{
}
我可以继续猜测这些情景,但我确信你会得到它的要点。
答案 6 :(得分:0)
由于只有三个选项“TRUE”,“FALSE”,“null”,我建议使用以下内容:
if(String.Compare(strValue, "null") != 0){
//do stuff
}
如果您需要最大兼容性且无法依赖输入,则可以使用strValue.toLower()切换strValue。