C# · 12月 27, 2021

c# – 检查字符串是空还是空的顺序?

对于我的编程考试,我不得不捍卫我写的代码.其中一条是: if(app.logourl == “” || app.logourl == null)

他问我是否有一个空字符串和空字符串之间的区别.我告诉他,区别是,null表示它不指向任何东西,所以没有实例化,但空字符串是.

考试后,我走到他面前问他是否正确,因为我看到他脸上有一个滑稽的样子.他告诉我,这是真的,他们是不同的,但我检查的值的顺序是不正确的.

几天后,我相信订单没有任何问题.我对么?

TL; DR

if(app.logourl == “” || app.logourl == null)

相当于

if(app.logourl == null || app.logourl == “”)解决方法 可以这样做,因为System.String的==的重载调用 String.Equals,这允许null.

但是,这不是通用的:如果要检查字符串长度而不是使用==“”,则您的第一个代码片段将遇到麻烦:

if(app.logourl.Length == 0 || app.logourl == null) // <<== Wrong!

而第二个将是罚款:

if(app.logourl == null || app.logourl.Length == 0) // <<== Correct

其原因在于||的评估短路和&&操作符:一旦他们知道结果(对于||,对于&&),则停止评估).在上面的第二个代码片段中,如果app.logourl为null,表达式的后半部分将被忽略,因此app.logourl.Length不会抛出空引用异常.

注意:为了表彰像这样的检查,C#class library offers a convenience method for doing this check:

if (string.IsNullOrEmpty(app.logourl)) { …}