关于vb.net:Len()函数与String.Length属性; 选择哪一个?

Len() function vs String.Length property; which to choose?

我正在从VB6过渡到VB.Net(VS 2010),并对后者有一个基本而非广泛的了解。我显然有很多代码可以......我很犹豫地使用"升级"一词,因为"端口"更合适,因为以前版本的VS的升级向导也可能已经注释掉了代码并说""嘿,你为什么不从头开始?"

在我遇到的Len()函数中,使用了一个过程来确定字符串变量的长度。这在VB.Net中仍然有效(尽管我认为它实际上是对Strings.Len方法的调用),但是另一种选择是只查询变量的.Length属性。

问题是使用哪个以及为什么使用。我浏览了相关的MSDN页面,他们似乎只告诉我方法/属性存在。没有任何有关性能问题的信息,特别是当涉及大量呼叫的循环时。

那么,我的问题是,是否有人知道使用一种方法优于另一种方法的任何经过测试和确认的好处,还是仅仅是个人喜好问题。尽管在给出堆栈溢出指导原则的同时,我很想看看是否有针对该问题的具体答案,但我在进展过程中遇到的任何类似情况的指针也将不胜感激。


因为您使用的是VB.NET,所以您的Strings可以是Nothing,除非您明确进行检查,否则大多数VB方法(包括Len)都将其与String.Empty相同,即""

使用Reflector,您可以看到Len被实现为空检查,为Nothing返回0,否则返回.Length,JITter可能会内联该调用。

因此,如果您使用其他VB方法,我建议您也使用Len,除非您知道String不是Nothing或在各处检查Nothing


所以根据这个:

Len, another classic BASIC function, returns the length of a string. System.String has the Length property that provides the same information. Is one better than the other?

Performance-wise, these two functions show little difference over 1000’s of iterations. There doesn’t appear to be any reason to prefer one over the other in this case plus there is no functional difference. I’m kind of partial to using the property value rather than the VB function since it encourages thinking of .NET strings as objects. However, at the core, it’s really only a personal preference thing.

如果您相信他们的话,那么您就会找到答案。否则,编写一个测试并进行迭代应该会给您最终的答案。


我不确定Len()方法的细节(我选择的语言是C#),但是我肯定会说Length属性。 LengthSystem.String类的成员,而Len()不是。

我的猜测是Len()只是Length属性之上的VB填充。从VB的角度来看,可能有人认为使用Len()更惯用。我想我更喜欢使用内置在类中的属性,而不是仅仅因为语言提供它而使用其他机制。


提供Len方法是为了与旧的VB6(及更早版本)非.NET代码向后兼容。使用它在技术上没有任何错误。它将工作,并且同样如此。但是,最好尽可能使用新的.NET做事方式。但是,除了让您更深入地了解" .NET思维方式"之外,使用String.Length的唯一真正的好处是,将来可以更轻松地将代码移植到其他.NET语言。


除了@Andrew的帖子外,Len()是Visual Basic运行时库中的字符串函数,其中Length是.net Framework API的System.String类的属性。


最近,我遇到了使用Len()函数的旧VB.Net代码的问题。我将项目升级到Core,后者引用了旧的VB.net dll文件,并且使用Len()函数。我遇到运行时兼容性错误-找不到方法:'Int32 Microsoft.VisualBasic.Strings.Len(System.String)'

我必须更改Core不推荐使用的所有旧功能。因此,我支持Steven Doggart建议在Len()上使用String.Length。