18

我正在从 VB6 过渡到 VB.Net (VS 2010),并且对后者有基本的而不是广泛的理解。我显然有相当多的代码......我犹豫使用“升级”这个词,因为“端口”会更合适,因为过去版本的 VS 中的升级向导可能只是注释掉了代码并说“喂,你怎么不从头开始呢?”

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

问题是使用哪个以及为什么。我浏览了相关的 MSDN 页面,他们似乎告诉我的只是方法/属性存在。对性能问题只字未提,尤其是在可能涉及大量调用循环时。

那么,我的问题是,是否有人知道使用一种方法比另一种方法有任何经过测试和确认的好处,或者这仅仅是个人偏好的问题。尽管考虑到 Stack Overflow 指南,这只是我有兴趣查看是否有特定答案的一个问题,但我在进行过程中可能遇到的类似情况的任何指示也将不胜感激。

4

6 回答 6

21

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

使用 Reflector,您可以看到Len它被实现为空检查,返回0forNothing或返回.Length,并且 JITter 可能会内联调用。

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

于 2012-08-20T14:50:46.733 回答
6

所以根据这个

Len,另一个经典的 BASIC 函数,返回字符串的长度。System.String 具有提供相同信息的 Length 属性。这个比那个好吗?

在性能方面,这两个函数在 1000 次迭代中几乎没有差异。在这种情况下,似乎没有任何理由偏爱另一种,而且没有功能差异。我倾向于使用属性值而不是 VB 函数,因为它鼓励将 .NET 字符串视为对象。但是,从本质上讲,这实际上只是个人喜好。

如果你相信他们的话,那么这就是你的答案。否则,编写测试代码并进行迭代应该会给你最终的答案。

于 2012-08-20T04:47:06.650 回答
4

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

我的猜测是这Len()只是Length属性顶部的 VB 垫片。Len()从 VB 的角度来看,有人可能会认为 using更符合习惯。我想我更喜欢使用类中内置的属性,而不是仅仅因为它是由语言提供的而使用不同的机制。

于 2012-08-20T04:40:35.560 回答
3

提供该Len方法是为了向后兼容旧的 VB6(和更早的)非 .NET 代码。使用它在技术上没有任何问题。它会起作用,而且同样有效。但是,最好尽可能使用新的 .NET 做事方式。但是,除了让您更深入地了解“.NET 思维方式”之外,使用它的唯一真正有形的好处String.Length是,它使将来更容易将代码移植到其他 .NET 语言。

于 2012-08-20T11:55:30.777 回答
2

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

于 2012-08-20T04:46:59.640 回答
1

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

我必须更改 Core 已弃用的所有这些旧功能。所以我坚持使用 Steven Doggart 建议的 String.Length 而不是 Len() 。

于 2019-01-11T21:32:08.173 回答