Sie müssen eine Kopie machen, aber das ist wahrscheinlich eine gute Sache. In C# 2 ist Ihr aktueller Code fast der sauberste, den Sie erstellen können. Es würde verbessert werden, indem Sie Ihre Liste direkt von Ihren Werten aufbauen (List<MyType> list = new List<MyType>(valueCollection);
), aber eine Kopie wird immer noch benötigt.
LINQ Verwendung mit C# 3, jedoch würden Sie in der Lage zu tun:
myDictionary.Values.ToList();
aber sagen, dass ich nicht (wahrscheinlich) versuchen, die Kopie zu vermeiden. Die Rückgabe einer Kopie Ihrer Werte ist tendenziell sicherer, da sie verhindert, dass der Aufrufer Probleme verursacht, wenn er versucht, Ihre Sammlung zu ändern. Durch das Zurückgeben einer Kopie kann der Aufrufer list.Add(...)
oder list.Remove(...)
tun, ohne Ihre Klassenprobleme zu verursachen.
Edit: Da Sie Ihren Kommentar unten, wenn alles, was Sie wollen, ist ein IEnumerable<T>
mit einem Grafen, können Sie einfach ICollection<T>
zurück. Diese wird direkt von ValueCollection
implementiert, was bedeutet, dass Sie nur direkt Ihr Wörterbuch des Wert zurückgeben können, ohne das Kopieren:
private ICollection<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
return valueCollection;
}
(Zugegeben, das Verfahren in diesem Fall wirklich nutzlos wird - aber ich wollte es zeigen, für Sie ...)
Jede bisher veröffentlichte Lösung beinhaltet das Kopieren der gesamten Sammlung. **Lies die Frage**. – SLaks
@SLaks: Ich adressierte dies direkt in meiner Antwort ... (was immer noch beinhaltet Kopieren) –
Gibt es irgendeine Relevanz für den keyType "int", oder ist es ein beliebiger Typ? –