通常,人们说最好说s.Length == 0
而不是s == ""
。但似乎这将是一种微观优化,也使得阅读更难。此外,前者中的一千万与后者相反,最多可节省60毫秒。
是否有理由让我失踪,例如s.Length == 0
是否真的能更好地传达意图?或者需要比较许多字符串是否空洞?
EDIT2:没有询问两种情况下最好的方法是IsNullOrEmpty,但我问为什么不可忽视的少数人坚持认为长度检查更优越。我假设他们有充分的理由这样说,并想知道它们是什么。
EDIT3:如开头所述,我知道一个比另一个快。问题是,人们推荐它的原因是什么?一些时间表明这并没有导致显着的差异。
答案 0 :(得分:7)
你是对的,它本质上是一种微观优化。测试长度确实使FxCop / Code Analysis保持安静 - 并且理由是性能,如documented in MSDN。
至于哪个更具可读性,那是主观的,我相信任何开发者都会理解。由于它们在语义上是不同的(如果s为空,则s.Length == 0
抛出,而s == ""
则不抛出),可读性不是唯一要考虑的标准。
如果您不确定字符串是否为空,String.IsNullOrEmpty
或String.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