C# C如果(标准值==“假”|标准值==“真”)

C# C如果(标准值==“假”|标准值==“真”),c#,C#,我有一个字符串,它包含一个TRUE、FALSE或null值,这个值是从我无法控制的文本文件中读取的。将“|”与“如果”一起使用的最佳方式是什么?记住strValue也可以为null,如果strValue为null,那么我不想输入if语句 if (strValue == "FALSE" | strValue == "TRUE") { //do stuff } 谢谢 从短路中获益。如果第一个表达式的计算结果为true,则不会尝试第二个表达式 如果需要不区分大小写的比较: if ("FALSE"

我有一个字符串,它包含一个TRUE、FALSE或null值,这个值是从我无法控制的文本文件中读取的。将“|”与“如果”一起使用的最佳方式是什么?记住strValue也可以为null,如果strValue为null,那么我不想输入if语句

if (strValue == "FALSE" | strValue == "TRUE")
{
  //do stuff
}
谢谢

从短路中获益。如果第一个表达式的计算结果为true,则不会尝试第二个表达式

如果需要不区分大小写的比较:

if ("FALSE".Equals(strValue, StringComparison.InvariantCultureIgnoreCase) || 
    "TRUE".Equals(strValue, StringComparison.InvariantCultureIgnoreCase)) {
   // ...
}
请注意,在null上调用.ToUpper或.ToLower将引发NullReferenceException

从短路中获益。如果第一个表达式的计算结果为true,则不会尝试第二个表达式

如果需要不区分大小写的比较:

if ("FALSE".Equals(strValue, StringComparison.InvariantCultureIgnoreCase) || 
    "TRUE".Equals(strValue, StringComparison.InvariantCultureIgnoreCase)) {
   // ...
}
请注意,在null上调用.ToUpper或.ToLower将引发NullReferenceException。

或者:

if (strValue == "FALSE") {
    // do stuff
} else if (strValue == "TRUE") {
    // do other stuff
} else {
    // strValue was NULL or invalid.
}
取决于您的需要。

或者:

if (strValue == "FALSE") {
    // do stuff
} else if (strValue == "TRUE") {
    // do other stuff
} else {
    // strValue was NULL or invalid.
}

根据你的需要。

如果你控制不住,我会认真考虑使用ToupP-你永远不知道什么时候有人把它变成真的或真的。< /P> 关于ToUpper和不必要的防御性编程的回应:

最初的问题是从我无法控制的文本文件中读取,是真是假,还是空。据我所知,在文本文件中没有通用的表示NULL的方法。在CSV文件中,可以将、、视为空字符串或空字符串。在固定宽度的文本文件中,可以将所有空格视为NULL,例如


所以OP已经做了一些数据转换/解释来达到这一点。

< P>我会认真考虑使用TUPPER,如果它超出了你的控制-你永远不知道什么时候有人把它变成真的或真的。 关于ToUpper和不必要的防御性编程的回应:

最初的问题是从我无法控制的文本文件中读取,是真是假,还是空。据我所知,在文本文件中没有通用的表示NULL的方法。在CSV文件中,可以将、、视为空字符串或空字符串。在固定宽度的文本文件中,可以将所有空格视为NULL,例如


因此OP已经完成了一些数据转换/解释,以达到这一点。

您可以将所有这些数据都放在一个if语句中:

if (!string.IsNullOrEmpty(strValue) && (strValue == "TRUE" || strValue == "FALSE")
{
  //do stuff
}

首先评估第一个条件,然后评估其他条件。我更喜欢使用显式的空检查,以帮助其他可能经验较少的开发人员理解代码。

您可以将所有代码都放在一个if语句中:

if (!string.IsNullOrEmpty(strValue) && (strValue == "TRUE" || strValue == "FALSE")
{
  //do stuff
}
首先评估第一个条件,然后评估其他条件。我更喜欢显式的空检查,以帮助其他可能经验较少的开发人员理解代码

如果strValue为null,那么我不想输入if语句

如果真的是这样,那么为什么要担心|位or运算符呢

你可以写:

您可能的意思是对真值或假值使用逻辑or运算符| |

我可以继续猜测场景,但我相信你已经明白了要点

如果strValue为null,那么我不想输入if语句

如果真的是这样,那么为什么要担心|位or运算符呢

你可以写:

您可能的意思是对真值或假值使用逻辑or运算符| |


我可以继续猜测这些场景,但我相信你已经了解了要点。

从你的问题来看,你真正关心的是字符串不是空的。然后您有两个选项:

if (!string.IsNullOrEmpty(strValue)) 
{
    //Do stuff with "TRUE" or "FALSE"
}
或者,如果您知道它永远不会是空字符串:

if (strValue != null) 
{
    //Do stuff with "TRUE" or "FALSE"
}

我推荐第一个选择。

从您的问题来看,您真正关心的是字符串不是空的。然后您有两个选项:

if (!string.IsNullOrEmpty(strValue)) 
{
    //Do stuff with "TRUE" or "FALSE"
}
或者,如果您知道它永远不会是空字符串:

if (strValue != null) 
{
    //Do stuff with "TRUE" or "FALSE"
}

我推荐第一个选项。

因为只有三个选项TRUE、FALSE和null,我建议使用以下选项:

if(String.Compare(strValue, "null") != 0){
  //do stuff
}

如果您需要最大的兼容性,并且不能依赖于您的输入,那么可以将strValue与strValue.toLower切换

由于只有三个选项TRUE、FALSE和null,我建议使用以下选项:

if(String.Compare(strValue, "null") != 0){
  //do stuff
}

如果您需要最大的兼容性,并且不能依赖于您的输入,那么可以将strValue与strValue.toLower切换

还请注意,如果strValue为null,则两个比较都不会返回true,因此OP的要求WRT nulls得到满足。是的,请查看文档中运算符|和运算符| |之间的差异:还请注意,如果strValue为null,则两个比较都不会返回true,因此OP的要求WRT nulls得到满足。是的,请看一下文档中运算符|和运算符| |之间的区别:注意|与| |不同。注意|与| |不同。事实上,您应该真正使用ToUpperInvariantor。您也可以使用Convert.ToBooleanTRUE
使用本机布尔比较:我不同意。如果输入格式的规范被定义为TRUE和FALSE,我不会故意接受任何其他内容。。。顺便说一下,如果String.ComparestrValue,FALSE,true==0 | | String.ComparestrValue,true,true==0是一个更好的方法。@chackey:不,你不能。Convert.ToBooleannull将返回false,因此您无法仅通过其返回值来区分null和false。我认为此解决方案甚至不正确。。。如果strValue为null,这肯定会导致调用ToUpper时出现null指针异常……实际上,您应该真正使用ToUpper不变量。或者您可以使用Convert.ToBooleanTRUE并使用本机布尔比较:我不同意。如果输入格式的规范被定义为TRUE和FALSE,我不会故意接受任何其他内容。。。顺便说一下,如果String.ComparestrValue,FALSE,true==0 | | String.ComparestrValue,true,true==0是一个更好的方法。@chackey:不,你不能。Convert.ToBooleannull将返回false,因此您无法仅通过其返回值来区分null和false。我认为此解决方案甚至不正确。。。在strValue为null的情况下,这肯定会导致调用ToUpper…Hmmm…时出现null指针异常。。。我理解你的推理,但这听起来像是在那些经验不足的开发人员中强化错误概念的一种方式。高级开发人员Bob就是这样做的,所以它一定是对的。好吧,这不仅仅是为了比较运算符,其他人建议在比较之前添加ToUpper方法调用,这肯定会失败,因为没有检查NullReferenceException。您首先检查null或其他任何内容的原因是它更安全。这是你希望所有开发者都能学到的东西。嗯。。。我理解你的推理,但这听起来像是在那些经验不足的开发人员中强化错误概念的一种方式。高级开发人员Bob就是这样做的,所以它一定是对的。好吧,这不仅仅是为了比较运算符,其他人建议在比较之前添加ToUpper方法调用,这肯定会失败,因为没有检查NullReferenceException。您首先检查null或其他任何内容的原因是它更安全。这是您希望所有开发人员都能学到的。