在我工作的代码库中,有几个地方的代码类似于以下代码:
Dim i As Integer
Dim ints As New ArrayList
ints.Add(1)
'... lets say we add more Integers
For each i in ints.ToArray(GetType(Integer))
'Do something
Next我想知道,由于省略了在运行时具有几乎相同的结果,所以从.ToArray(GetType(Integer))中获得了什么好处。这就是调用For Each i In ints。我看到的唯一区别是,如果ArrayList中存在整数以外的其他类型,如果不调用.ToArray(),则产生的错误消息会更有帮助
如果我要做一个已经指定了类型的For Each循环,为什么还要在ArrayList上使用For Each?
发布于 2013-05-17 01:46:54
如果我要执行一个已经指定了类型的
循环,为什么要在ArrayList上使用ToArray(类型)呢?
一般来说,您可能不想这样做。调用ToArray()实际上会创建一个新的值数组。
如果您的循环要修改ArrayList,那么这样做可能会有好处。你不能在枚举时修改大多数集合,所以你会得到一个异常。通过添加ToArray调用,可以枚举集合的副本(作为数组),因此可以修改原始集合。
注意,一般来说,如果是这样的话,我会使用ToList(),而不是ToArray(),因为它通常会更高效一些(通常会减少一个内存分配)。我还建议在任何新代码中使用List(Of Integer)而不是ArrayList,因为这样可以保证类型安全。
发布于 2013-05-17 01:48:35
您不需要在For each循环中的ArrayList上调用ToArray:i已经声明为Integer,因此将自动为您执行类型转换。
有时,您可能需要对查询结果调用数组,以便将数据复制到内存中。它的一个优点是将数据库查询的结果复制到内存中,因为您可以更快地关闭连接。此外,当查询引用已修改的变量时,或者当多次生成IEnumerable的代价很高时,调用ToList可以帮助您。
发布于 2013-05-17 01:53:29
在该ArrayList上调用.ToArray()有两个原因:
https://stackoverflow.com/questions/16594032
复制相似问题