为什么建议检查字符串长度以确定空虚?

时间:2011-06-16 17:43:08

标签: c#

通常,人们说最好说s.Length == 0而不是s == ""。但似乎这将是一种微观优化,也使得阅读更难。此外,前者中的一千万与后者相反,最多可节省60毫秒。

是否有理由让我失踪,例如s.Length == 0是否真的能更好地传达意图?或者需要比较许多字符串是否空洞?

编辑:我知道IsNullOrEmpty,但是当人们回答这个问题时,他们经常提到长度检查比空字符串更好。

EDIT2:没有询问两种情况下最好的方法是IsNullOrEmpty,但我问为什么不可忽视的少数人坚持认为长度检查更优越。我假设他们有充分的理由这样说,并想知道它们是什么。

EDIT3:如开头所述,我知道一个比另一个快。问题是,人们推荐它的原因是什么?一些时间表明这并没有导致显着的差异。

6 个答案:

答案 0 :(得分:7)

你是对的,它本质上是一种微观优化。测试长度确实使FxCop / Code Analysis保持安静 - 并且理由是性能,如documented in MSDN

至于哪个更具可读性,那是主观的,我相信任何开发者都会理解。由于它们在语义上是不同的(如果s为空,则s.Length == 0抛出,而s == ""则不抛出),可读性不是唯一要考虑的标准。

如果您不确定字符串是否为空,String.IsNullOrEmptyString.IsNullOrWhiteSpace可能更具可读性(即表达您的意图)。

答案 1 :(得分:2)

原因是做s == ""你正在进行字符串比较,这比其他方式慢(s.Length == 0

答案 2 :(得分:1)

在我的大多数代码中,使用string.IsNullOrEmpty()string.IsNullOrWhiteSpace()(在.NET 4中)更容易阅读,更具体地说,我需要做的事情。

答案 3 :(得分:0)

s == string.Empty是s.length == 0的替代。

我猜测为什么s ==""不建议是""会在堆上创建一个不可变的字符串。仅作比较,您可能不想创建字符串对象。无论如何有人可以验证我的声明。

答案 4 :(得分:0)

字符串值比较比数值比较慢。

我会在你的情况下使用String.IsNullOrEmpty

答案 5 :(得分:0)

并非所有的点网字符串都在运行时被实现 这意味着在这些情况下s.Length == 0会更快 因为它避免了实际的字符串比较,如果两个字符串中的一个没有被实现则会产生 See String.IsInterned() on MSDN