我想检查变量字符串data
是否包含空字符串。
效率更高,data.Length==0
或data==string.Empty
?
我忘了说,data
已经过检查,但保证不是null
。
答案 0 :(得分:13)
1亿次迭代的测试结果:
Equality operator ==: 796 ms
string.Equals: 811 ms
string.IsNullOrEmpty: 312 ms
Length: 140 ms [fastest]
Instance Equals: 1077 ms
答案 1 :(得分:11)
使用String.IsNullOrEmpty(data)
而不是
答案 2 :(得分:2)
我会选择第三个,它不容易出错:
String.IsNullOrEmpty(data)
答案 3 :(得分:2)
我想说你应该使用String.isNullOrEmpty method来检查空值。
答案 4 :(得分:2)
这两项检查都不是你的瓶颈。但是,如果您选择第一个,如果字符串为null,则可能会遇到NullReferenceException
。你不会遇到第二个问题。
答案 5 :(得分:2)
逻辑上,data.Length == 0
更有效,因为它只是比较两个整数值,而data == String.Empty
正在比较字符串(尽管非常短)。
但是,编译器或框架可能会进行一些优化,以最大限度地减少或消除任何差异。如果不运行自己的时序测试,很难做出绝对的陈述。
最后,我怀疑差异是否足以引起注意。
答案 6 :(得分:2)
最佳做法是使用String.IsNullOrEmpty
(或者,如果符合您的要求,则使用.Net 4.0 - String.IsNullOrWhiteSpace
)。
如果您致电s.Length
,那么如果字符串为NullReferenceException
,您将获得null
。这意味着您需要检查if(s == null || s.Length == 0)
。这将是最有效的,也可能是最快的,但您也可以使用String.IsNullOrEmpty
。
s == string.Empty
(null
与空字符串不同), null
将返回false。
在性能方面,不要再花时间考虑它。它几乎从不,永远,永远,永远不会影响性能。
答案 7 :(得分:2)
正如人们所提到的,使用.NET 4.0框架中引入的string.IsNullOrEmpty(str)
或string.IsNullOrWhiteSpace(str)
。
答案 8 :(得分:1)
使用String.IsNullOrEmpty()
进行检查。