Для каждого цикла в массиве 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))
Другие вопросы по тегам