如何最快速地检查一个字符串是否为空,是否存在特定情况需要特别处理?
1. String.IsNullOrEmpty()
2. str == null
3. str == null || str == String.Empty
4. str == null || str == ""
5. str == null || str.length == 0
使用选项1。
如果您想特别检查null
或空字符串,那么没有理由使用除string.IsNullOrEmpty
之外的任何其他方法。在.NET中,这是通用的做法,且性能上的差异几乎可以忽略不计。
这是过度优化的危险的经典例子。请编写高效的代码,但不要为了无法证明的性能收益而浪费开发时间。请记住,作为开发人员,您的时间通常比CPU的时间更有价值。
Donald Knuth曾说:
我们应该忘记小的效率问题,大约97%的时间:过早的优化是万恶之源。
如果这种微观优化水平确实对您的应用程序至关重要,则您可能不应该使用.NET。
你是否也关心空格?
如果空格是有效的,请使用String.IsNullOrEmpty
,否则请使用String.IsNullOrWhiteSpace
(在 .Net 4.0 或更高版本中)。后者等同于但性能更好的String.IsNullOrEmpty(value) || value.Trim().Length == 0;
参见http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
速度的差异将是不可察觉的。
正确的方法是1,因为它最安全、易读性最佳。
String.IsNullOrEmpty()
很容易读懂,并且能够按预期工作,我很乐意坚持使用它。
如果您确实有一个边缘情况,使其无法胜任,请将其添加到问题中,这将使问题更具相关性。
使用
String.IsNullOrEmpty()
这是在.NET上最好的方式。
我个人总是使用String.IsNullOrEmpty()
。我认为它们除了检查是否为null
或空之外并没有做任何特殊的事情,所以它不应该比手写检查慢。
此外,有时您可能会匆忙地将null
检查放在最后,从而得到一个令人不愉快的惊喜。:)
str == " "
。 - H Hstring
的默认值是空字符串?string
是一个引用类型,它的默认值是null。 - Lukazoidstr
不是一个好的变量名。s
就可以。 - ctn