当我在VB.NET中将对象值连接在一起形成一个字符串时,使用&
concat或+
concat与调用之间的性能或建议的最佳实践是否存在差异?每个对象都有.ToString()
?
示例(更快或最佳做法):
Dim result1 As String = 10 & "em"
Dim result2 As String = 10.ToString() + "em"
答案 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类。
否则,我建议使用'&'用于字符串连接。它可以避免混淆,因为“+”很容易混淆整数运算。