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>