空字符串、空值、长度或者是字符串为空或者为null?

10

如何最快速地检查一个字符串是否为空,是否存在特定情况需要特别处理?

1. String.IsNullOrEmpty()

2. str == null

3. str == null || str == String.Empty

4. str == null || str == ""

5. str == null || str.length == 0

7
第一个是正确的方式,因为它是字符串内置的。 - Sai Kalyan Kumar Akshinthala
3
"'str'" 不是一个好的变量名。 - Kane
在大多数情况下,这些示例没有区别。例如,测试长度是否为0是检查它是否为空字符串。在一个示例中,仅检查它是否为null有点愚蠢,因为字符串的默认值是空字符串,而不是null字符串。我们谈论的是性能差异,你甚至无法开始测量,因为它们是如此微不足道的。停止尝试优化琐碎的任务。 - Security Hound
1
这很可能不会有任何影响。最好担心的是 str == " " - H H
1
@Ramhound 你为什么认为string的默认值是空字符串?string是一个引用类型,它的默认值是null。 - Lukazoid
str不是一个好的变量名。s就可以。 - ctn
9个回答

22

使用选项1。

如果您想特别检查null或空字符串,那么没有理由使用除string.IsNullOrEmpty之外的任何其他方法。在.NET中,这是通用的做法,且性能上的差异几乎可以忽略不计。

这是过度优化的危险的经典例子。请编写高效的代码,但不要为了无法证明的性能收益而浪费开发时间。请记住,作为开发人员,您的时间通常比CPU的时间更有价值

Donald Knuth曾说:

我们应该忘记小的效率问题,大约97%的时间:过早的优化是万恶之源。

如果这种微观优化水平确实对您的应用程序至关重要,则您可能不应该使用.NET。


5

3

2

速度的差异将是不可察觉的。

正确的方法是1,因为它最安全、易读性最佳。


1

String.IsNullOrEmpty() 很容易读懂,并且能够按预期工作,我很乐意坚持使用它。

如果您确实有一个边缘情况,使其无法胜任,请将其添加到问题中,这将使问题更具相关性。


1

使用

String.IsNullOrEmpty()

这是在.NET上最好的方式。


0

我个人总是使用String.IsNullOrEmpty()。我认为它们除了检查是否为null或空之外并没有做任何特殊的事情,所以它不应该比手写检查慢。

此外,有时您可能会匆忙地将null检查放在最后,从而得到一个令人不愉快的惊喜。:)


0

在编程中,建议使用String.IsNullOrEmpty来快速检查空字符串。因为这是String类内置的方法。


0
在你的示例中,方案2是最快的。但它与其他解决方案不同,因为它不检查字符串是否为空。
否则,如果您想检查字符串是否为null或空,则方案5是最快的。 String.IsNullOrEmpty()执行与方案5完全相同的操作,但添加了一个函数调用(如果它在运行时没有内联)。尽管如此,我建议使用第一种解决方案:
1 / 性能惩罚可以忽略不计
2 / 它更容易阅读
3 / 它是一个内置方法,所以它是未来的。

我必须对这个答案进行负投票,因为字符串变量的默认值是空字符串而不是 null 字符串。尽管你关于 String.IsNullOrEmpty 的所有说法都是正确的。 - Security Hound
我不理解你的观点。我在哪里谈论字符串的默认值? - Kevin Gosse
我提出了这一点。这对你的陈述“解决方案2是最快的”是一个负面因素,因为它似乎并没有真正做到作者想要测试的事情,因为它的使用范围有限。 - Security Hound
这就是为什么我强调“但它是一种不同于其他解决方案的解决方案,因为它不检查字符串是否为空。” - Kevin Gosse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接