我希望检查变量字符串
在以下两种情况下哪种更有效率,
我忘了说,
data
是否包含空字符串。在以下两种情况下哪种更有效率,
data.Length==0
或 data==string.Empty
?我忘了说,
data
已经被检查并保证不是 null
。data
是否包含空字符串。data.Length==0
或 data==string.Empty
?data
已经被检查并保证不是 null
。1亿次迭代的测试结果:
Equality operator ==: 796 ms
string.Equals: 811 ms
string.IsNullOrEmpty: 312 ms
Length: 140 ms [fastest]
Instance Equals: 1077 ms
Length
会是最快的,结果我猜对了 :) 顺便说一句,不错的链接 :) - Petar Minchev请使用String.IsNullOrEmpty(data)
而非其他方式。
String.IsNullOrEmpty(data)
两种检查方式都不会成为瓶颈。但是,如果您选择第一种方式,并且字符串为空,则可能会遇到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
。
s == string.Empty
如果字符串为 null
,则返回 false(null
不同于空字符串)。正如其他人所提到的,使用string.IsNullOrEmpty(str)
或在.NET 4.0框架中引入的string.IsNullOrWhiteSpace(str)
。
String.IsNullOrEmpty()
进行检查。