9
votes

Quelle est la différence entre l'Ienumerable non générique et le générique Ienumerable ?

Désolé pour une question aussi vague, mais je cherche la meilleure partie de la journée, j'ai lu l'article après l'article (et de nombreuses questions ici), mais je ne peux tout simplement pas trouver une réponse facile à comprendre.

i (Pensez-moi) savoir ce que ISenumerable est pour, mais je ne peux tout simplement pas comprendre ce que cela signifie lorsqu'il est défini avec un argument de type générique, par exemple: p>

IEnumerable<int> test = method();


0 commentaires

5 Réponses :


2
votes

Je pense juste à ienumerable de la même manière que je penserais à une liste , qui vient un peu plus naturellement je suppose. Avec la mise en garde qu'un ienumerable ne fait pas tout autant qu'une liste , et que c'est essentiellement une chose une chose des intemples pouvant être énumérées


2 commentaires

Je n'aime pas vraiment cette analogie. Une liste suppose que tous les articles sont au même endroit. Où comme un iEnumerable dit simplement que vous pouvez obtenir tous les éléments de certaines séquences. C'est comme la différence entre un livre téléphonique et Internet. Je peux obtenir tous les chiffres pour les plombiers à Chicago de l'un ou l'autre endroit, mais dans le répertoire, ils sont déjà dans une liste - alors que dans un ienumerable ou sur Internet, ils peuvent être n'importe quoi, je viens de Besoin de savoir comment les trouver - je ne vous ai pas révélé cependant, je pense simplement que votre réponse pourrait utiliser un peu plus de clarté.


User689466 cherche un moyen de comprendre iEnumerable. Clairement, il y a des différences - ce n'est qu'un point de départ avec un concept facilement compréhensible et une fois qu'il vit qu'il puisse passer à la compréhension des subtilités entre les deux



2
votes

Le mot que vous recherchez est "Generics", et l'exemple que vous donnez est iEnumérable utilisé comme générique pour les articles de type INT. Ce que cela signifie, c'est que la collection iEnumerable que vous utilisez est fortement touchée pour ne contenir que des objets INT par opposition à tout autre type.

Google "C # Generics iEnumerable" et vous trouverez toutes les informations que vous souhaitez sur cette question.


0 commentaires

0
votes

Ienumerable signifie qu'il peut être utilisé dans une boucle de foresach.

éléments peut être utilisé sous la forme de xxx


0 commentaires

12
votes

Un iEnumerable est essentiellement une collection d'objets. Il a la méthode getenumerator () qui vous permet de parcourir tous les objets dans l'énumérable.

Un iEnumerable est essentiellement une collection d'entiers. Il a la méthode getenumerator () qui vous permet de parcourir tous les entiers dans l'énumérable.

iEnumerable test = méthode (); signifie que méthode () obtient une collection si des entiers de quelque part. Il pourrait s'agir d'une liste, d'une matrice ou d'un autre type de données, mais c'est certainement un groupe d'entre eux et ce sont tous des entiers et vous avez la capacité de les ithérer.

Ce message peut également être utile: Qu'est-ce que La différence entre iénumérable et matrice, iliste et liste?


3 commentaires

Ok, je pense que je comprends maintenant, je n'ai pas réalisé que cela pourrait être une collection et je n'ai tout simplement pas compris comment cela a fonctionné. Y a-t-il une bonne ressource que vous pouvez montrer qui montre les avantages / les pièges comparant iEnumerable / liste / tableaux, car je veux vraiment en savoir plus. +1 (quand je peux!)


Les listes et les tableaux ont tous deux implémenté ienumerable . Toutes les collections génériques dans System.Collections.Generic Implémente iEnumerable . Vous êtes peut-être intéressé par ce message: Stackoverflow.com/Questtions/764748/...


Merci ... et marquage comme réponse ... Vous voudrez peut-être éditer / mettre ce lien dans votre réponse principale, car cela m'a vraiment fait comprendre complètement.



2
votes

un iEnumerable a une méthode getenumerator qui retournera un ienumerator , dont la méthode actuelle retournera un < Code> Object . Un ienumerable a une méthode getenumerator qui renvoie un ienumerator , dont la méthode actuelle sera Renvoie un t . Si vous savez à l'avance, le type attendu de l'objet doit être renvoyé par l'énumérateur, il est généralement préférable d'utiliser la forme générique.

Une autre distinction est que ienumerator hériter Idisposable , qui permet au code qui est effectué avec un énumérateur à appeler Disposer sur elle sans avoir à s'inquiéter de savoir s'il est soutenu. Par comparaison, lors de l'utilisation d'un ienumerator non générique, il est nécessaire de tester s'il est Idisposable et appelez Dispose dessus si tel est le cas. Notez que l'utilisation de la forme non générique de ienumerable ienumerator ne soulage pas l'une des obligations d'appeler Disposer . À titre d'exemple, jetez la collection de style VB à ienumerable , puis appelant getenumerator 100 000 fois sans appeler Disposer sera extrêmement lent (plusieurs secondes, Même sur une I7) à moins qu'une collection de déchets se produise. Disposer le ienumerator après que chaque appel accélère plus de cent fois.


0 commentaires