12
votes

Y a-t-il une méthode "hasnext" pour un ienumerator?

avec java itérateur s, j'ai utilisé la méthode hasnext pour déterminer si une itération a plus d'éléments (sans consommer un élément) - Ainsi, hasnext est comme une méthode " peek ".

Ma question: Y a-t-il quelque chose comme un " hasnext " ou " peek " méthode avec C # Generic ienumerator S?


2 commentaires

Comment pourriez-vous éventuellement ne pas savoir? Est-il possible que vous n'ayez jamais vu msdn.microsoft.com/en-us/ Bibliothèque / 78DFE2YB.ASPX ?


Merci beaucoup d'avoir souligné cela, monsieur Saunders.


6 Réponses :


18
votes

Non, malheureusement, il n'y a pas.

the ienumerator L'interface n'expose que les membres suivants:

Méthodes:

Dispose
movenext
réinitialiser

propriétés :

actuel


2 commentaires

Nous prenons sur Ienumerator, au lieu d'Iénumerable ici, non? Et * devrait être sur disposer, au lieu de MOVENNEXT.


@Even - Yikes, ce poste était répandu avec des erreurs! Merci de les pointer de l'avant.



2
votes

Nope , Just Movenext , réinitialiser et actuel .


0 commentaires

36
votes

Non, mais en C #, vous pouvez demander à plusieurs reprises l'élément actuel sans passer à la suivante. C'est juste une façon différente de le regarder.

Ce ne serait pas trop difficile à écrire une classe C # pour prendre un fichier ienumerator. / Code> et renvoyer un Java-style itérateur . Personnellement, je trouve le style .NET plus facile à utiliser dans la plupart des cas, mais nous y allons :)

EDIT: D'accord, ceci est complètement non testé, mais je pense cela fonctionnera. Il compile au moins :) xxx


7 commentaires

(Je suis heureux de coder l'adaptateur si quelqu'un vous intéresse, mais je ne le ferai pas autrement ...)


Je serais intéressé à la voir, Jon.


Wow, c'était rapide! Merci, Jon!


@Andrew, il accorde un peu la responsabilité. Je trouve la version DotNet plus facile à travailler avec.


L'échec majeur des itérateurs de Java est qu'ils ne disposent pas de l'équivalent de Idisposable, ce qui les rend impossibles à utiliser pour tout ce qui pourrait être itérateur sur une ressource (par exemple des lignes dans un fichier).


Pourquoi avez-vous 4 cours et pas seulement 2? Je penserais que vous avez juste besoin de classes qui enveloppent Ienumerable et Iénumerator. Quelle est l'activité Iiterator?


@Eyal: Ils ne sont que des mappages pour les interfaces Java. Vous n'avez pas avoir pour les avoir bien sûr - mais utiliser la classe de béton ici serait Force vous utiliser toujours l'enveloppe, même si vous vouliez parfois mettre en œuvre le style Java directement.



3
votes

Les énumérateurs sont souvent évalués paresseusement afin que Hasnext ait peu de sens.


0 commentaires

2
votes

Vous pouvez également essayer de consulter ce 0 commentaires


-1
votes

Utilisez une bonne vieille vieille itération xxx


0 commentaires