ToString()和&之间的最佳实践或性能差异级联

时间:2010-06-01 23:35:47

标签: .net vb.net performance string

当我在VB.NET中将对象值连接在一起形成一个字符串时,使用& concat或+ concat与调用之间的性能或建议的最佳实践是否存在差异?每个对象都有.ToString()

示例(更快或最佳做法):

Dim result1 As String = 10 & "em"
Dim result2 As String = 10.ToString() + "em"

4 个答案:

答案 0 :(得分:4)

没有性能差异。如果您明确省略.ToString()调用,编译器基本上只会为您填写。如果使用Option Explicit,则需要调用该方法,否则将出现编译错误。我听说过很好的理由选择两者兼顾和+语义,因此选择真的取决于你。

答案 1 :(得分:1)

我从来没有尝试过,也没有看到两者之间的性能测试,我怀疑是否真的有速度差异。我认为使用第一个选项是更好的做法,因为推断了.ToString()。让语言隐藏您的详细信息就像在动态语言中一样。

答案 2 :(得分:1)

字符串是不可变的 - 意味着每次操作字符串时,都会创建一个字符串对象的新实例。

在这些情况下,要获得更好的效果(以及一般最佳做法),请使用StringBuilder System.Text类。

在您的示例中(即使是C#编码器,如果我的VB等效项不正确,请道歉)

Dim result As StringBuilder() = new StringBuilder()
result.Append("10")
result.Append("em")
Dim resultString As String = result.ToString()

只有在调用.ToString()对象的StringBuilder方法时才会创建字符串的实例。

您应该习惯使用StringBuilder作为最佳做法。

答案 3 :(得分:0)

您也可以使用string.concat(str1,str2,str3,str4)。这是一个重载函数,需要2-4个字符串参数。使用3或4个字符串连接它是最快的选项,因为它被实现为在一个操作中执行连接,这节省了性能,因为字符串是不可变的。

一旦你达到~10 +字符串,你应该按照RPM1984的建议使用stringbuilder类。

否则,我建议使用'&'用于字符串连接。它可以避免混淆,因为“+”很容易混淆整数运算。