Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net:索引编号在“中”;对于每一个“;_Vb.net_Collections - Fatal编程技术网

vb.net:索引编号在“中”;对于每一个“;

vb.net:索引编号在“中”;对于每一个“;,vb.net,collections,Vb.net,Collections,在VB.net中的某个时候,我会遇到如下情况: For Each El in Collection Write(El) Next 但是如果我需要索引号,我必须将其更改为 For I = 0 To Collection.Count() - 1 Write(I & " = " & Collection(I)) Next 甚至(更糟) 是否有其他方法获取索引?如果您使用的是泛型集合(集合(T)),则可以使用 如果您需要索引,那么for循环是最简单的选项,并且具有很好的性

在VB.net中的某个时候,我会遇到如下情况:

For Each El in Collection
   Write(El)
Next
但是如果我需要索引号,我必须将其更改为

For I = 0 To Collection.Count() - 1
   Write(I & " = " & Collection(I))
Next
甚至(更糟)


是否有其他方法获取索引?

如果您使用的是泛型集合(集合(T)),则可以使用


如果您需要索引,那么for循环是最简单的选项,并且具有很好的性能。除了您提到的备选方案之外,还可以使用重载方法跟踪索引并继续使用foreach循环

Dim list = Enumerable.Range(1, 10).Reverse() ''# sample list
Dim query = list.Select(Function(item, index) _
                           New With { .Index = index, .Item = item })
For Each obj In query
    Console.WriteLine("Index: {0} -- Item: {1}", obj.Index, obj.Item)
Next

但是,如果唯一的原因是对其进行迭代并了解索引,那么我将坚持使用for循环。上面没有明确说明您选择跳过for循环的原因。

我相信您最初使用计数器变量的方法是最有效的方法。使用Linq或IndexOf会破坏性能

Dim i as Integer = 0
For Each obj In myList
    'Do stuff
    i+=1
Next

这不是很低的性能吗?它必须寻找整个集合才能得到索引。我不知道性能如何。如果您主要对性能感兴趣,您应该更新您的问题以反映这一点。对不起,如果我表现得粗鲁,那不是我的本意。:)错误的假设是给定元素在泛型集合中只出现一次。您列出的选项有什么更糟糕的?你是否发现它们在语义上不够清晰?你担心性能吗?只是想知道,因为我知道VB有一个隐藏的索引变量。最好的选择是访问它。但似乎没有办法这么做,我同意。等待VB包含“对于myList中的每个对象,使用索引i”构造;-)或者类似python的.Enumerate,它返回像字典一样的indexValuePair。
Dim list = Enumerable.Range(1, 10).Reverse() ''# sample list
Dim query = list.Select(Function(item, index) _
                           New With { .Index = index, .Item = item })
For Each obj In query
    Console.WriteLine("Index: {0} -- Item: {1}", obj.Index, obj.Item)
Next
Dim i as Integer = 0
For Each obj In myList
    'Do stuff
    i+=1
Next