从不同的样式检查字符串null

时间:2013-08-08 16:26:12

标签: c#

我之前不知道这个问题,但我在下面的代码块中感到困惑。

代码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个代码块之间有什么不同。

3 个答案:

答案 0 :(得分:2)

让我们从原语开始:

第一个块检查字符串control.Text.Trim()null还是String.Empty

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

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

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

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

因此,第一,第二和第四块等同于检查空字符串control.Trim和第三块是否无用且不可能满足。请注意,如果controlnullcontrol.Textnull,您将遇到异常。因此,您应该强烈考虑使用`String.IsNullOrWhiteSpace并将所有内容替换为:

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

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

答案 1 :(得分:0)

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

控制可能是

control.Text可能是

在这种情况下,所有三个版本都将会破坏...

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

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

也许

答案 2 :(得分:0)

更合适的是:

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

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

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

你还应该看到string.empty(“”)和null之间的差异,这些不一样。代码4和代码2是相同的,但如果Text为null,则两者都会抛出。