Je sais, j'ai d'autres options, par ex. Je pourrais conserver une liste séparée de clés. S'il vous plaît ne suggérez pas d'autres options. Je veux simplement savoir si je peux retirer ça. S'il vous plaît ne me demandez pas quel problème j'essaye de résoudre ou de quoi que ce soit comme ça. Ceci est une question pure et simple CS.
Je veux savoir si quelqu'un sait un moyen de prendre les clés d'un donné que je peux le faire sans problème: p> Pourquoi cela me donne-t-il des erreurs? p> hashtable code> et de les jeter dans une liste
iEnumerable
(List<int>)hashtable.Keys
6 Réponses :
parce que hashtable.keys code> est une collection d'objets qui n'est pas covariant avec une liste d'entiers. p>
Si nous allons diviser les cheveux, la covariance n'est pas explicitement nécessaire; La convertibilité est.
Si vous avez des méthodes d'extension LINQ disponibles, vous pouvez effectuer les suivants ..
List<int> keys = hashtable.Keys.OfType<int>().ToList();
+1. La raison spécifique étant que clés code> est un
icollection code>, qui implémente uniquement
ienumerable code>, pas
ienumerable
Notez également que, étant donné que l'OP demande "autre ienumerable
tolist code> et simplement taper la variable comme
ienumerable
var code>).
@Adam Robinson Bon appel, Merci également d'avoir ajouté votre explication, je suis sur une connexion de mauvaise qualité pour le moment et je suis en train de modifier ma réponse est légèrement douloureuse pour que je puissiez reporter à vos commentaires pour plus d'informations.
Merci! J'interrète mal la description de la méthode Cast
Votre La distribution à foreach code> LOOP lancera un
InvalidCastException code> si la collection code> code> ne contient pas de
int code>. p>
Liste
icollection code> non générique code> à un
icollection
La distribution échoue car les clés ne sont pas un type qui peut être utilisé comme s'il s'agissait d'une liste; C'est une ICOLLection, une interface très basique qui n'expose pas les méthodes disponibles sur une liste.
parce que foreach code> nécessite
hashtable.keys code> pour être un
iEnumerable
hashtable.Keys code> n'est pas une liste
List<int> keys = hashtable.Keys.OfType<int>().ToList();
foreach code> nécessite
ienumerable code>, pas
ienumerable
Techniquement oui, mais si cela est entièrement tapé fortement, vous devez définir la variable de l'article comme étant de ce type (ou quelque chose qu'il peut être implicitement lancé à); Vous obtiendrez une erreur de compilateur si vous essayez de faire quelque chose comme foreach (int ID dans mycollectionofreferenceyTypes) code>
Vous pouvez faire icollection
Utilisez le dictionnaire au lieu de la version non générique. Ou utiliser la méthode de l'extension Castto. Voir http://msdn.microsoft.com/en-us/ Bibliothèque / system.collections.icollection.aspx Pour plus de détails sur la collection non générique renvoyée par Hastable.Key aussi bien que le lien vers la méthode de casting que vous pouvez utiliser. P>