对于List数组的每个循环(Of KeyValuePair(Of String,Integer))

时间:2014-09-04 15:00:49

标签: vb.net foreach keyvaluepair

我在“List(Of KeyValuePair)”中为For Each循环做了一些问题。

我将ParamArray传递给函数

ParamArray args() As List(Of KeyValuePair(Of String, Integer))

然后我尝试在集合上做一个For Each

For Each arg As KeyValuePair(Of String, Integer) In args

我得到的错误是:

  

类型'System.Collections.Generic.List(Of System.Collections.Generic.KeyValuePair(Of String,Integer))'的值'无法转换为'System.Collections.Generic.KeyValuePair(Of String,Integer)'

我无法弄清楚如何做到这一点,我找不到任何如何做到这一点的例子。

我现在唯一想到的是

For Each arg As Object In args

然后将对象转换为KeyValuePair,但必须有一个更简洁的方法来做到这一点......

2 个答案:

答案 0 :(得分:5)

args是一个数组。这意味着您有一个List(Of KeyValuePair(Of String, Integer))数组。

要访问每个项目中的每个项目,您需要执行此操作(未经测试):

For Each arg As List(Of KeyValuePair(Of String, Integer)) In args
    For Each kvp as KeyValuePair(Of String, Integer) In arg
    ' Do Stuff
    Next
Next

根据我上面的评论:使用Dictionary(Of String, Integer)和一些Linq语句可能会更好。

修改:此外,根据您尝试对每件商品执行的操作,以任何方式修改商品都会导致异常,因为您无法修改您正在迭代的商品

答案 1 :(得分:1)

这声明了一个列表数组:

ParamArray args() As List(Of KeyValuePair(Of String, Integer))

你可能意味着一组KVP(选项#1):

ParamArray args As KeyValuePair(Of String, Integer)

或(选项#2):

args() As KeyValuePair(Of String, Integer)

或(选项#3):

args As List(Of KeyValuePair(Of String, Integer))