对于我的编程考试,我必须保护我写过的代码.其中一条线是:
if(app.Logourl == "" || app.Logourl == null)
Run Code Online (Sandbox Code Playgroud)
他问我null和空字符串之间是否有区别.我告诉他,区别在于它null意味着它没有指向任何东西,所以它没有实例化,但空字符串是.
考试结束后,我走到他身边,问他是否正确,因为我看到他脸上有一种滑稽的表情.他告诉我,他们是不同的,但我检查数值的顺序是不正确的.
几天后,我相信订单没有任何问题.我对么?
TL; DR
是
if(app.Logourl == "" || app.Logourl == null)
Run Code Online (Sandbox Code Playgroud)
相当于
if(app.Logourl == null || app.Logourl == "")
Run Code Online (Sandbox Code Playgroud)
das*_*ght 14
这是确定你所采取的方式,因为超载==的System.String呼叫String.Equals,允许null秒.
但这不是通用的:如果你想检查字符串长度而不是使用== "",你的第一个代码片段将遇到麻烦:
if(app.Logourl.Length == 0 || app.Logourl == null) // <<== Wrong!
Run Code Online (Sandbox Code Playgroud)
而第二个会很好:
if(app.Logourl == null || app.Logourl.Length == 0) // <<== Correct
Run Code Online (Sandbox Code Playgroud)
这样做的原因是在评价短路||和&&运营商:他们一旦知道结果(true对||,false对&&)他们停止评价.在上面的第二个片段中,如果app.Logourl是null,则表达式的后半部分将被忽略,因此app.Logourl.Length不会抛出空引用异常.
注意:为了识别这样的检查发生在各处,C#类库为执行此检查提供了一种方便的方法:
if (string.IsNullOrEmpty(app.Logourl)) {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |