我在“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,但必须有一个更简洁的方法来做到这一点......
答案 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))