不同样式的字符串null检查

本文关键字:null 检查 字符串 样式 | 更新日期: 2023-09-27 18:26:50

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

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

不同样式的字符串null检查

让我们从基元开始:

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

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

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

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

好吧,这很容易理解。但是,请注意,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的第一部分)。

更合适的是:

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

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

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

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

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

控制可能是

控件。文本可能是

在这种情况下,所有三个版本都会爆炸。。。

private static bool validControl(Control argControl)
{
   return (argControl != null) && (argControl.Text != null) && (argControl.Text.Trim() != ""));
}
if (validControl(control))
{
   // code to execute
}

可能