Для каждого цикла в массиве List(Of KeyValuePair(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, но должен быть более аккуратный способ сделать это...


person JA12    schedule 04.09.2014    source источник
comment
Почему бы просто не использовать Dictionary(Of String, Integer)?   -  person Brandon    schedule 04.09.2014
comment
Как было указано, args объявляется как массив. Если это не ваше намерение, удаление () должно исправить это.   -  person tinstaafl    schedule 04.09.2014
comment
@tinstaafl: args передается как ParamArray   -  person Brandon    schedule 04.09.2014


Ответы (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.

Редактировать: Кроме того, в зависимости от того, что вы пытаетесь сделать с каждым элементом, любое изменение элемента приведет к исключению, поскольку вы не можете изменить коллекцию, которую перебираете.

person Brandon    schedule 04.09.2014
comment
Спасибо за это, этот вариант работал нормально. Этот ParamArray предназначен для гибкого количества параметров. Исходный код (VB6) использовал Optional и isMissing, чего я не могу сделать в VB.NET, это было мое решение. - person JA12; 04.09.2014
comment
Рад, что мое решение сработало. Не могли бы вы пометить вопрос как отвеченный для дальнейшего использования? - person Brandon; 04.09.2014
comment
Нажмите на галочку рядом с моим ответом. Он станет зеленым, что пометит вопрос как ответ. - person Brandon; 04.09.2014
comment
Ладно, это было не очевидно. Я искал наверху что-то, касающееся исходного вопроса... - person JA12; 05.09.2014

Это объявляет массив списков:

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

Вы наверное имели ввиду массив КВП (вариант №1):

ParamArray args As KeyValuePair(Of String, Integer)

Или (вариант №2):

args() As KeyValuePair(Of String, Integer)

Или (вариант №3):

args As List(Of KeyValuePair(Of String, Integer))
person Neolisk    schedule 04.09.2014