不同样式的字符串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个代码块之间有什么不同。
让我们从基元开始:
第一块检查字符串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
空串和第三块是否是无用的并且不可能满足。请注意,如果control
是null
或control.Text
是null
,则会遇到异常。因此,您应该强烈考虑使用`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
}
可能