Ich weiß, ich habe andere Möglichkeiten, z.B. Ich könnte eine separate Liste von Schlüsseln verwalten. Bitte schlagen Sie keine anderen Optionen vor. Ich möchte nur wissen, ob ich das durchziehen kann. Bitte frag mich nicht, welches Problem ich lösen will oder so etwas. Dies ist eine reine und einfache CS-Frage.
Ich möchte wissen, ob jemand weiß, wie man die Schlüssel von Hashtable
nimmt und sie in eine List<int>
oder eine andere Art von IEnumerable<int>
umwandelt (vorausgesetzt, dass meine Schlüssel tatsächlich ganze Zahlen sind) .
Da kann ich das ohne Probleme machen:
%Vor%Warum gibt mir das Fehler?
%Vor%Wenn LINQ-Erweiterungsmethoden verfügbar sind, können Sie Folgendes tun:
%Vor%Auch
%Vor%funktioniert möglicherweise abhängig vom automatischen Boxen
Weil foreach
erfordert, dass hashtable.Keys
ein IEnumerable<TKey>
ist, was es ist. % Co_de% ist jedoch kein hashtable.Keys
; es ist eine einfache ICollection, die nicht die gleiche ist. Um es in eine Liste zu konvertieren, versuchen Sie es mit Linq:
Dies wird im Grunde durch die Keys-Auflistung aufzählen und jedes Element zu einer neuen Liste hinzufügen, dann geben Sie die Liste. OfType () ist "sicherer" als Cast; Cast versucht nur, die gesamte Auflistung als List<TKey>
zu behandeln, was zu Laufzeitfehlern oder unvorhersehbarem Verhalten führen kann, wenn ein enthaltenes Element null ist oder nicht implizit in eine ganze Zahl umgewandelt werden kann. OfType iteriert im Gegensatz dazu die Quelle und erzeugt eine Aufzählung nur der Elemente, die tatsächlich Inte sind. Das funktioniert, wenn Sie sicher sind, dass alle Schlüssel Integer sind.
Entweder Wörterbuch statt nicht-generischer Version verwenden. Oder verwenden Sie die CastTo-Erweiterungsmethode. Weitere Informationen zu nicht generischer Sammlung, die von Hastable.Key ebenfalls zurückgegeben wird, finden Sie Ссылка Verknüpfung zur Casting-Methode, die Sie verwenden können.