0

我想知道在其中使用For Each循环时字符串数组的行为。考虑以下代码:

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 循环访问 StringArray 两次,那么即使我在每个For Each 循环中只使用 10 个元素,StringArray 中的所有元素是否也会被加载两次?从性能的角度来看,是否建议使用字符串数组作为数据结构来存储需要多次访问的字符串列表,例如在一个方法中访问 20 次?

4

1 回答 1

5

“加载”是什么意思?您只是在遍历数组。这不会“加载”任何东西——它只是迭代它。如果您担心的是,它不会复制。

至少在 C# 中,foreach在编译时已知为数组的表达式上的循环将基本上保持(并增加)索引并使用直接数组访问。它甚至不会创建一个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

从性能的角度来看,是否建议使用字符串数组作为数据结构来存储需要多次访问的字符串列表,例如在一个方法中访问 20 次?

相对于什么?例如,这样做比每次都重新查询数据库要好。List(Of String)但是将 a 转换为字符串数组是不值得的......

于 2012-04-27T09:06:41.540 回答