Преобразовать список (Of KeyValuePair(Of String,Int32) в словарь (Of String, Int32), используя.ToDictionary
Чтобы иметь возможность сортировать словарь по значению, я использую этот код:
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, я получаю сообщение об ошибке "pair.Key":
Значение типа "Строка" нельзя преобразовать в "System.Collections.Generic.List(Of System.Collections.Generic.KeyValuePair(Of String, Integer))
Как мне использовать.ToDictionary для получения объекта Dictionary из моего списка объектов?
Если я изменю строку с помощью метода.ToDictionary на это:
idCurrentJobs = jobsSortedByCount.ToDictionary(Of KeyValuePair(Of String, Int32))(Function(pair As KeyValuePair(Of String, Int32)) pair)
Я получаю эту ошибку из-за "Strict On":
Опция 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 ответа
Это будет работать, даже с 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)))
Пытаться:
idCurrentJobs = jobsSortedByCount.ToDictionary(Of String, Int32)(Function(p) p.Key, Function(p) p.Value)