2010-06-01 36 views
1

當我將對象值連接在一起以在VB.NET中形成字符串時,是否存在性能差異或使用& concat或+之間的建議最佳做法連接每個對象的調用.ToString()ToString()和&concatenation之間的最佳實踐或性能差異

實施例(這是更快或最佳實踐):

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

你的意思是在你的第二個例子中使用'+',即'Dim result2 As String = 10.ToString()+「em」'? – jball 2010-06-01 23:44:41

+0

我一直使用&來拼接。恕我直言,只是令人困惑。如果你正在做很多字符串操作,請使用stringbuilder。 – dbasnett 2010-06-01 23:50:28

+0

錯誤修正,謝謝@jball – slolife 2010-06-02 00:18:50

回答

4

沒有性能差異。如果您明確省略了.ToString()調用,編譯器將基本上爲您填寫。如果您使用Option Explicit,則需要調用該方法,否則您將收到編譯錯誤。我聽說選擇&和+語義的理由很充分,所以選擇真的取決於你。

+0

我想你的意思是,如果你使用'Option Strict',你將被要求調用該方法? – MarkJ 2010-06-03 08:17:29

+0

總是使用'Option Strict' http://stackoverflow.com/questions/222370/option-strict-on-and-net-for-vb6-programmers – MarkJ 2010-06-03 08:24:56

1

我從來沒有試過,也沒有看到兩者之間的性能測試,我懷疑是真的有速度差異。我覺得使用第一個選項是更好的做法,因爲推斷了.ToString()。讓語言像你在動態語言中一樣隱藏你的細節。

1

字符串是不可變的 - 意味着每次操縱字符串時都會創建一個字符串對象的新實例。

在這些情況下,要獲得更好的性能(和一般最佳實踐),請使用StringBuilder類的System.Text

在你的榜樣(我是一個C#編碼器,所以道歉,如果我的VB相當於是不正確的)

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

只有當你調用StringBuilder對象的.ToString()方法是創建的字符串的一個實例。

您應該習慣使用StringBuilder作爲最佳做法。

+2

這取決於有多少串連接。 – 2010-06-02 04:49:11

+1

在這種情況下,'StringBuilder'會比連接字符串慢... – porges 2010-06-02 04:49:45

0

你也可以使用string.concat(str1,str2,str3,str4)。這是一個重載的函數,並且需要2-4個字符串參數。使用3或4個字符串進行連接時,它是最快的選擇,因爲它可以在一個操作中執行連接,從而節省性能,因爲字符串是不可變的。

一旦你打到〜10 +字符串,你應該使用RPM1984建議的stringbuilder類。

否則,我建議使用'&'進行字符串連接。它可以避免混淆,因爲'+'可以很容易地被整數運算混淆。

相關問題