-2

在此之前我不知道是否问过,但我对下面的代码块感到困惑。

代码 1

if (String.IsNullOrEmpty(control.Text.Trim()))
{
      // Code to execute
}

代码 2

if (control.Text.Trim() == "")
{
      // Code to execute
}

代码 3

if (control.Text.Trim() == null)
{
      // Code to execute
}

代码 4

if (control.Text.Trim() == string.Empty)
{
      // Code to execute
}

据我说,所有人都在为我工作。

我只是想知道这 4 个代码块之间有什么不同。

4

3 回答 3

2

让我们从原语开始:

第一个块检查字符串control.Text.Trim()是否为nullString.Empty

第二个块检查字符串control.Text.Trim()是否为"".

第三块检查字符串control.Text.Trim()是否为null.

第四个块检查字符串control.Text.Trim()是否为String.Empty; 这与第二个块完全相同:""equals String.Empty

很好,这很容易理解。但是,请注意,String.Trim()将永远不会返回null。因此,第一个块等价于control.Text.Trim() == String.Empty。这与第二个块和第四个块相同,同样是因为""equals String.Empty。第三块永远不会被击中。

因此,第一、第二和第四块相当于检查control.Trim空字符串和第三块是否无用且无法满足。小心,如果controlnull或是你control.Textnull遇到异常。因此,您应该强烈考虑使用`String.IsNullOrWhiteSpace并将所有内容替换为:

if(control != null && String.IsNullOrWhiteSpace(control.Text)) {
    // code to execute
}

(除非您有某种control不是的保证null,在这种情况下,请省略 的第一部分if)。

于 2013-08-08T16:30:09.580 回答
0

control.Text.Trim() 永远不会为空

控制可能是

control.Text 可能是

在这种情况下,所有三个版本都会炸毁块......

private static bool validControl(Control argControl)
{
   return (argControl != null) && (argControl.Text != null) && (argControl.Text.Trim() != ""));
}

if (validControl(control))
{
   // code to execute
}

也许

于 2013-08-08T16:32:51.303 回答
0

更合适的是:

 if (String.IsNullOrWhiteSpace(control.Text))
 {
   // Code to execute
 }

这样你就可以避免空引用异常。

您所有的示例都有相同的错误,如果变量为空,它们将抛出异常。

您还应该看到 string.empty ("") 和 null 之间的区别,它们不是一回事。代码 4 和代码 2 相同,但如果 Text 为空,两者都会抛出。

于 2013-08-08T16:33:53.177 回答