Mam metodę, która zwraca IEnumerable<KeyValuePair<string, ArrayList>>
, ale niektórzy wywołujący wymagają, aby wynik metody był słownikiem. Jak mogę zamienić IEnumerable<KeyValuePair<string, ArrayList>>
na a, Dictionary<string, ArrayList>
żeby móc używać TryGetValue
?
metoda:
public IEnumerable<KeyValuePair<string, ArrayList>> GetComponents()
{
// ...
yield return new KeyValuePair<string, ArrayList>(t.Name, controlInformation);
}
gość:
Dictionary<string, ArrayList> actual = target.GetComponents();
actual.ContainsKey("something");
c#
collections
dictionary
ienumerable
idictionary
learnerplates
źródło
źródło
Odpowiedzi:
Jeśli używasz .NET 3.5 lub .NET 4, możesz łatwo utworzyć słownik za pomocą LINQ:
Nie ma czegoś takiego jak
IEnumerable<T1, T2>
ale aKeyValuePair<TKey, TValue>
jest w porządku.źródło
Dictionary
który zająłby takieIEnumerable<KeyValuePair<TKey, TValue>>
samo, jakList<T>
trwaIEnumerable<T>
. Nie ma również par klucz / wartośćAddRange
lub nawet takich,Add
które przyjmują. O co w tym chodzi?ToDictionary()
Od wersji .NET Core 2.0 konstruktor
Dictionary<TKey,TValue>(IEnumerable<KeyValuePair<TKey,TValue>>)
już istnieje.źródło