我之前不知道这个问题,但我在下面的代码块中感到困惑。
代码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个代码块之间有什么不同。
答案 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
和第三块是否无用且不可能满足。请注意,如果control
为null
或control.Text
为null
,您将遇到异常。因此,您应该强烈考虑使用`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,则两者都会抛出。