Для каждого цикла в массиве List(Of KeyValuePair(Of String, Integer))
У меня проблемы с выполнением цикла For Each в коллекции List(Of KeyValuePair(Of).
Я передаю ParamArray для функции
ParamArray args() As List(Of KeyValuePair(Of String, Integer))
Затем я пытаюсь сделать для каждого на коллекции
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 ответа
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.
Изменить: Кроме того, в зависимости от того, что вы пытаетесь сделать с каждым элементом, изменение элемента любым способом приведет к исключению, поскольку вы не можете изменить коллекцию, для которой вы выполняете итерацию.
Это объявляет массив списков:
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))