Je sais que techniquement, une interface est utilisée pour lire et ne pas écrire ou modifier cependant, je souhaite ajouter une fonction Ajout et AddRange à la classe suivante, voici ce que j'ai actuellement ce qui ne fonctionne pas
public class HrefCollection : IEnumerable<Href> { private IEnumerable<Href> hrefs; public IEnumerable<Href> Add( Href href ) { yield return href; } public IEnumerable<Href> AddRange( List<Href> hrefs ) { foreach( Href href in hrefs ) { yield return href; } } public IEnumerator<Href> GetEnumerator() { return hrefs.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return hrefs.GetEnumerator(); } }
3 Réponses :
foreach( Href href in this.hrefs ) { yield return href; } foreach( Href href in hrefs ) { yield return href; }
@Burnzy: Pourriez-vous être plus précis?
Eh bien, si j'appelle Addrange, la collection reste nulle.
En fait, vous devriez vous débarrasser de l'Ienumerable privé
@Burzy, mais en utilisant le rendement n'ajoutera jamais à la collection que vous avez, sortie une nouvelle collection.
Le Si vous souhaitez pouvoir ajouter des éléments à votre collection, vous devez utiliser une structure de données permettant d'ajouter des éléments - par exemple iEnumerable
iEnumerable code> Les interfaces sont utilisées pour générer une séquence en lecture seule ou fournir une vue en lecture seule des éléments dans une collection.
Liste
ienumerable
iEnumerable code> interfaces. P>
Cela fonctionne, mais c'est toujours assez stupide et cela ne sert pas au but d'apprendre à quel point le rendement fonctionne.
@tehmick: True, mais la question indique "Je veux ajouter une fonction add and AddRange à la classe suivante". Je sais que la question mentionne également à l'aide de code> retour code>, mais la réponse est que vous ne pouvez tout simplement pas utiliser retour de rendement code> pour ajouter des éléments à une collection.
public class HrefCollection<T> : ObservableCollection<T>, IEnumerable<T> { // access via this[index] }
Vous êtes peut-être un peu confus ici. Y a-t-il une raison pour vous de ne pas utiliser simplement une liste?
"Une interface est utilisée pour lire et ne pas écrire ou éditer" ?? Je ne comprends pas cette déclaration. Vous voulez dire iEnumerable?
Je suis un peu miscoulé, je veux dire que l'interface iEnumerable ne contient pas de méthode "Ajouter" car elle est utilisée pour renvoyer des objets de la collection actuelle non pour ajouter ou enlever quelque chose de celui-ci.
Je ne veux pas utiliser la liste (même si je pouvais implémenter IList), je souhaite utiliser le rendement de rendement et bien comprendre comment cela fonctionne et comment je peux l'utiliser.