我正在从VB6过渡到VB.Net(VS 2010),对后者有一个基本的而不是广泛的理解。我显然有相当多的代码...我犹豫使用“升级”这个词当“端口”更容易,因为在以前版本的VS中的升级向导可能刚刚注释掉代码并说“嘿,你为什么不从头开始重新开始?”
我在Len()
函数中使用的一个过程用于确定字符串变量的长度。这仍然适用于VB.Net(虽然我认为它实际上是对Strings.Len
方法的调用),但另一种方法是只查询变量的.Length
属性。
问题是使用哪个以及为什么。我查看了相关的MSDN页面,他们似乎告诉我的是方法/属性存在。没有任何关于性能问题的说法,特别是涉及大量呼叫的循环时。
那么,我的问题是,是否有人知道使用一种方法而不是另一种方法的任何测试和确认的好处,或者它是否仅仅是个人偏好的问题。关于我在进行升级时遇到的类似情况的任何指针也会受到赞赏,但鉴于Stack Overflow指南,我只是想知道是否有特定的答案,这是一个问题。
答案 0 :(得分:18)
因为您使用的是VB.NET,所以Strings
可以是Nothing
,除非您明确检查,否则大多数VB方法(包括Len
)都会将其视为同样的String.Empty
即""
。
使用Reflector,您可以看到Len
实现为空检查,为0
返回Nothing
,否则返回.Length
,JITter可能会在线调用
所以,如果你正在使用其他VB方法,我建议也使用Len
,除非你知道String
不是Nothing
或检查Nothing
无处不在。
答案 1 :(得分:6)
所以根据this:
Len,另一个经典的BASIC函数,返回字符串的长度。 System.String具有提供相同信息的Length属性。一个比另一个好吗?
在性能方面,这两个函数在1000次迭代中几乎没有差别。在这种情况下似乎没有任何理由偏爱另一个,加上没有功能差异。我更倾向于使用属性值而不是VB函数,因为它鼓励将.NET字符串视为对象。然而,在核心,它实际上只是个人偏好。
如果你相信他们的话,那就是你的答案。否则,编写测试和迭代应该给你最终答案。
答案 2 :(得分:4)
我不确定Len()
方法的具体细节(我选择的语言是C#),但我肯定会说Length
属性。 Length
是System.String
类的成员,而Len()
则不是。
我的猜测是Len()
只是Length
属性之上的VB垫片。从VB的角度来看,有人可能会认为使用Len()
更加惯用。我想我更喜欢使用内置于该类中的属性,而不是仅使用不同的机制,因为它是由语言提供的。
答案 3 :(得分:2)
除@ Andrew的帖子外,Len()是来自Visual Basic run-time library的字符串函数,其中Length
是。System.String
类.net框架API的属性。
答案 4 :(得分:2)
提供Len
方法是为了向后兼容旧的VB6(及更早版本的)非.NET代码。使用它在技术上没有任何问题。它会起作用,同样也适用。但是,最好尽可能使用新的.NET方式。但是,除了让您更多地了解“.NET思维模式”之外,使用String.Length
的唯一真正实际好处是,它可以使代码在将来更容易移植到其他.NET语言中。
答案 5 :(得分:0)
最近,我遇到了使用Len()函数的旧VB.Net代码的问题。我将项目升级到Core,后者引用了旧的VB.net dll文件,并且使用Len()函数。我遇到运行时兼容性错误-找不到方法:'Int32 Microsoft.VisualBasic.Strings.Len(System.String)'
我必须更改Core不推荐使用的所有旧功能。因此,我坚持使用Steven.Doggart建议的在Len()上使用String.Length。