Frage
Ich habe dies im Netz sah aber ich dies fragen, um sicherzustellen, dass ich auf etwas nicht verpasst haben. Gibt es eine eingebaute Funktion HashSets auf Listen in C # zu konvertieren? Ich brauche Duplizität der Elemente zu vermeiden, aber ich brauche eine Liste zurückzukehren.
Lösung
Hier ist, wie ich es tun würde:
using System.Linq;
HashSet<int> hset = new HashSet<int>();
hset.Add(10);
List<int> hList= hset.ToList();
HashSet ist per Definition enthält keine Duplikate. So gibt es keine Notwendigkeit für Distinct
.
Andere Tipps
Zwei gleichwertige Optionen:
HashSet<string> stringSet = new HashSet<string> { "a", "b", "c" };
// LINQ's ToList extension method
List<string> stringList1 = stringSet.ToList();
// Or just a constructor
List<string> stringList2 = new List<string>(stringSet);
Persönlich würde ich lieber telefonieren ToList
ist es bedeutet, dass Sie nicht den Typ der Liste neu formulieren müssen.
Im Gegensatz zu meinen früheren Gedanken, lassen beide Möglichkeiten Kovarianz leicht in C # 4 ausgedrückt werden:
HashSet<Banana> bananas = new HashSet<Banana>();
List<Fruit> fruit1 = bananas.ToList<Fruit>();
List<Fruit> fruit2 = new List<Fruit>(bananas);
Es ist die Linq-Erweiterungsmethode ToList<T>()
, die das tut (es auf IEnumerable<T>
definiert ist, die durch HashSet<T>
implementiert ist).
So stellen Sie sicher, dass Sie using System.Linq;
Wie Sie offensichtlich bewusst die HashSet
sind, werden sicherstellen, dass Sie keine Duplikate haben, und diese Funktion ermöglicht es Ihnen, es als IList<T>
zurückzukehren.
List<ListItemType> = new List<ListItemType>(hashSetCollection);