2012-04-27 37 views
0

我想知道當使用時對於每個循環的字符串數組的行爲。請考慮下面的代碼:字符串數組行爲:對於使用VB.NET的字符串數組中的每個操作

Dim StringArray(499) As String 
'fill in each element with random string 

Dim count As Int32 
Dim current As String 

For Each current in StringArray 
    'do something with current 
    count = count + 1 
    If count = 10 
     Exit For 
    End If 
Next 

're-enter the StringArray again 
count = 0 
For Each current in StringArray 
    'do something with current 
    count = count + 1 
    If count = 10 
     Exit For 
    End If 
Next 

正如代碼所示以上,如果我需要使用兩次For Each循環訪問字符串數組,是真的是在字符串數組ALL元素會即使只有我兩次裝每個使用10個元素For Each loop?從性能角度來看,建議使用String數組作爲數據結構來存儲需要多次訪問的字符串列表,例如在方法中使用20次?

+0

快速問題:「**將被加載兩次**」你是什麼意思加載?從哪裏裝載? – 2012-04-27 09:28:43

回答

5

你是什麼意思的「加載」?你只是遍歷數組。這不會「加載」任何東西 - 它只是迭代它。它不會複製,如果這是你所擔心的。

至少在C#中,編譯時已知的一個表達式是一個數組,基本上會保持(並遞增)一個索引並使用直接數組訪問。它甚至不會創建IEnumerator(Of T)。我希望VB能以同樣的方式行事。

注意,LINQ可以讓你的示例代碼,雖然簡單:

' No need to declare any variables outside the loop 
For Each current As String in StringArray.Take(10) 
    ' Do something with current 
Next 

從性能的角度來看,是最好用String數組作爲數據結構來存儲是一個需要字符串列表訪問多次,例如在一個方法內20次?

而不是什麼?例如,比起每次重新查詢數據庫,最好這樣做。但它不值得將List(Of String)轉換爲字符串數組...

+2

@Downvoter:關心評論? – 2012-04-27 09:15:54

+0

明顯是h8r! – 2012-04-27 13:18:04

相關問題