Konvertieren Sie eine Hashtable.Keys in Listint oder andere IEnumerabilt

8

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%     
Samo 08.03.2011, 17:32
quelle

6 Antworten

16

Wenn LINQ-Erweiterungsmethoden verfügbar sind, können Sie Folgendes tun:

%Vor%

Auch

%Vor%

funktioniert möglicherweise abhängig vom automatischen Boxen

    
Quintin Robinson 08.03.2011, 17:35
quelle
1

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:

%Vor%

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.

    
KeithS 08.03.2011 17:36
quelle
0

Weil hashtable.Keys eine Sammlung von Objekten ist, die nicht mit einer Liste von ganzen Zahlen kovariant ist.

    
Vadim 08.03.2011 17:34
quelle
0

Sie können ICollection<int> keyCols = hashtable.Keys;

eingeben     
Kumar 08.03.2011 17:36
quelle
0

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.

    
Alexei Levenkov 08.03.2011 17:37
quelle
-1

Ihre foreach Schleife wird InvalidCastException ausgeben, wenn die Keys Sammlung kein int enthält.

Die Umwandlung in List<int> schlägt fehl, da der Compiler eine nicht generische ICollection in eine bestimmte ICollection<T>

konvertieren kann     
Bryan 08.03.2011 17:36
quelle

Tags und Links