0

在使用 c# 并使用具有多个条件的 IF 语句时,我遇到了一个小问题。

这是最常见的情况。

private void SomeFunction(string SomeString)
{

   if(SomeString != null && SomeString.Trim() != "")
   {
   }
}

在某些语言(如 javascript)中,如果第一个参数失败(SomeString != null),则不会进行第二次检查。即使第一个参数失败,C# 似乎也会检查两个参数,然后第二个参数将引发异常,因为您不能对空值使用 .Trim() 。

现在我正在通过嵌套我的 ifs 来解决这个问题,这是一个凌乱的工作。像这样:

private void SomeFunction(string SomeString)
{

   if(SomeString != null)
   {
     if(SomeString.Trim() != "")
     {
      .....
     }
   }
}

有人对解决此问题的更好方法有任何建议或最佳实践吗?

4

5 回答 5

4

即使第一个参数失败,C# 似乎也会检查两个参数

不是真的,请参阅MSDN 中的&& 运算符(C# 参考)

于 2013-09-29T17:23:09.880 回答
3

你的假设是完全错误的。当您使用条件AND时,如果第一个条件为 FALSE,则永远不会评估或执行第二个条件。在条件OR中,如果第一个条件为 TRUE,则永远不会评估或执行第二个条件。

换句话说,如果编译器有足够的信息来确定表达式的结果,它就会停止考虑表达式的第二部分。

这称为短路评估

它是 C 派生语言的基本编程原则,也适用于所有其他主要语言。

于 2013-09-29T17:23:39.117 回答
3

有一个更好的方法:

private void SomeFunction(string SomeString)
{
    if (!string.IsNullOrWhiteSpace(SomeString))
    {
        // your code
    }
}
于 2013-09-29T17:21:38.280 回答
0
if(!string.IsNullOrEmpty(SomeString))

如果你坚持做“.Trim()”,类似于 ProgramFOX 更喜欢这个

于 2013-09-29T17:32:16.033 回答
0
if (!String.IsNullOrEmpty(SomeString))
{
}
于 2013-09-29T17:26:36.180 回答