Преобразовать список (Of KeyValuePair (Of String, Int32) в словарь (Of String, Int32), используя .ToDictionary - PullRequest
2 голосов
/ 02 ноября 2010

Чтобы иметь возможность сортировать словарь по значению, я использую этот код:

Dim idCurrentJobs As IDictionary(Of String, Int32) = New Dictionary(Of String, Int32)
'The string in the dictionary represents a jobname and the integer is a counter for how many jobs im currently are running in the application'
idCurrentJobs.Add("JobName1", 2)
idCurrentJobs.Add("JobName2", 1)
idCurrentJobs.Add("JobName3", 2)
idCurrentJobs.Add("JobName4", 5)
idCurrentJobs.Add("JobName5", 3)
idCurrentJobs.Add("JobName6", 4)

Dim jobsSortedByCount As List(Of KeyValuePair(Of String, Int32)) = New List(Of KeyValuePair(Of String, Int32))(idCurrentJobs)
jobsSortedByCount.Sort(Function(firstPair As KeyValuePair(Of String, Int32), nextPair As KeyValuePair(Of String, Int32)) firstPair.Value.CompareTo(nextPair.Value))

idCurrentJobs = jobsSortedByCount.ToDictionary(Of List(Of KeyValuePair(Of String, Int32)))(Function(pair As KeyValuePair(Of String, Int32)) pair.Key)

Когда я использую метод .ToDictionary для преобразования объекта List обратно в объект Directory I 'я получаю сообщение об ошибке "pair.Key":

Значение типа 'String' нельзя преобразовать в 'System.Collections.Generic.List (Of System.Collections.Generic.KeyValuePair (Of String, Integer))

Как использовать .ToDictionary для получения объекта Dictionary из моего списка объектов?

Если изменить строку с помощью метода .ToDictionary наthis:

idCurrentJobs = jobsSortedByCount.ToDictionary(Of KeyValuePair(Of String, Int32))(Function(pair As KeyValuePair(Of String, Int32)) pair)

Я получаю эту ошибку из-за "Strict On":

Option Strict On запрещает неявные преобразования из System.Collections.Generic.Dictionary (Of System.Collections.Generic.KeyValuePair (Of String, Integer), System.Collections.Generic.KeyValuePair (Of String, Integer)) 'в' System.Collections.Generic.IDictionary (Of String, Integer) '

Как я могу решить это?

Ответы [ 2 ]

7 голосов
/ 02 ноября 2010

Это будет работать, даже с Option Strict On.

Dim list As List(Of KeyValuePair(Of String, Int32))
Dim dict As IDictionary(Of String, Int32) = 
    list.ToDictionary(Function(p) p.Key, Function(p) p.Value)

Проблема прямо здесь из вашего кода:

ToDictionary(Of List(Of KeyValuePair(Of String, Int32)))
2 голосов
/ 02 ноября 2010

Попробуйте:

idCurrentJobs = jobsSortedByCount.ToDictionary(Of String, Int32)(Function(p) p.Key, Function(p) p.Value)
...