哪个更有效率,"data.Length==0"或“数据= = string.Empty"

本文关键字:quot Empty string 数据 data 有效率 Length | 更新日期: 2023-09-27 18:02:06

我想检查变量字符串data是否包含空字符串。

data.Length==0data==string.Empty哪个更有效?

我忘了说,data已经检查过了,保证不是null

哪个更有效率,"data.Length==0"或“数据= = string.Empty"

1亿个迭代的测试结果:

Equality operator ==:   796 ms 
string.Equals:          811 ms 
string.IsNullOrEmpty:   312 ms 
Length:                 140 ms  [fastest]
Instance Equals:       1077 ms 

使用String.IsNullOrEmpty(data)而不是

我会选择第三个,它更不容易出错:

String.IsNullOrEmpty(data)

我会说你应该使用字符串。isNullOrEmpty方法也检查空

这两个检查都不会成为你的瓶颈。但是,如果您选择第一个,如果字符串为空,您可能会遇到NullReferenceException。第二个就不会有这个问题了

从逻辑上讲,data.Length == 0更有效,因为它只是比较两个整数值,而data == String.Empty比较的是字符串(尽管非常短)。

但是,编译器或框架可以进行许多优化来最小化或消除任何差异。这使得在不运行自己的计时测试的情况下很难做出绝对语句。

最后,我怀疑这种差异是否足以引起注意。

最佳实践是使用String.IsNullOrEmpty(或者,如果它符合您的要求,从。net 4.0 - String.IsNullOrWhiteSpace)。

如果你调用s.Length,那么如果字符串是null,你将得到NullReferenceException。这意味着您需要检查if(s == null || s.Length == 0)。这将是最有效的,可能是最快的,但您不妨使用String.IsNullOrEmpty

如果字符串为null (null与空字符串不同),

s == string.Empty将返回false。

就性能而言,不要再浪费时间去想它了。它几乎永远、永远、永远、永远不会影响性能。

正如人们所提到的,使用。net 4.0框架中引入的string.IsNullOrEmpty(str)string.IsNullOrWhiteSpace(str)

使用String.IsNullOrEmpty()检查