c# - 检查字符串是否为 null 或空的顺序是否重要?

标签 c#

为了我的编程考试,我必须捍卫我写的代码。其中一行是:

if(app.Logourl == "" || app.Logourl == null)

他问我 null 和空字符串有没有区别。我告诉他区别在于 null 意味着它没有指向任何东西,所以它没有被实例化,但是空字符串是。

考试结束后,我走到他面前问他我说的对不对,因为我看到他脸上有一种滑稽的表情。他告诉我它们确实不同,但我检查值的顺序不正确。

几天后,我相信订单没有任何问题。我说得对吗?

长话短说

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

原因是 ||&& 运算符的计算短路:一旦他们知道结果(true for ||, false for &&) 他们停止评估。在上面的第二个片段中,如果 app.Logourlnull,表达式的后半部分将被忽略,因此 app.Logourl.Length不会抛出空引用异常。

注意:认识到像这样的检查到处都是,C# 类库 offers a convenience method for doing this check :

if (string.IsNullOrEmpty(app.Logourl)) {
    ...
}

关于c# - 检查字符串是否为 null 或空的顺序是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250649/

相关文章:

c# - 格式化字符串,我做错了什么?

c# - 获取 XML 的 XElement

c# - 另外获取刷新 token 以使用 Microsoft.Identity.Client 访问 token

c# - 全屏应用程序选项(隐藏应用程序标题栏)

c# - 如何对 IList<Class> 进行排序?

c# - 在批处理文件中包含一个批处理文件

c# - 具有相等 DateTimeOffset 日期的单元测试返回错误

c# - Prism 退订与订阅 token 不起作用

c# - System.IO 未找到通过子命令生成的路径

c# - 如何删除或覆盖现有 IQueryable 中的 where 子句