Je cherche à ajouter une fonctionnalité "récemment ouverte" à mon application et je me demandais s'il y avait une simple façon de faire des listes "débordement". À ce part, je veux dire, lorsque vous ajoutez un élément au-delà de la capacité de la liste, tous les éléments sont décalés.
Exemple de code de fonctionnalité souhaitée (évidemment ce n'est pas vrai, la liste contiendrait réellement A, B, C): < / p> désolé pour la question simple. Le problème lui-même est évident de résoudre (le plan d'implantation était d'hériter de la liste), je n'aime tout simplement pas avoir à réinventer la roue et confondre les futurs programmeurs avec des objets personnalisés lorsque la langue ou le cadre a cette fonctionnalité. P> p>
3 Réponses :
Autant que je sache, il n'y a pas de telle collection dans la bibliothèque.
Vous pouvez écrire cela très facilement, basé sur une liste <> code> ou un tableau.
Vous ne pensez pas que hériter de la liste intégrée est plus facile et plus facile à gérer?
@Hossein Ce n'est pas une bonne idée d'hériter des listes intégrées. Ils n'ont pas de membres virtuels, donc une simple distribution et votre logique est partie.
@Henk c'est une idée intersive. J'ajouterais un itérateur pour obtenir les articles dans le bon ordre.
@Hossein je pense à mettre en œuvre icollection ilist Liste La file d'attente
Convenu que c'est une mauvaise idée de descendre de la liste collection
Vous pouvez le faire facilement avec Je serais, personnellement, envelopper cela dans une classe que vous pourriez utiliser, c'est-à-dire: linkedlist public class OverflowCollection<T> : IEnumerable<T>
{
private int max;
private LinkedList<T> list = new LinkedList<T>();
public OverflowCollection(int maxItems)
{
this.max = maxItems;
}
public void Add(T item)
{
this.list.AddFirst(item);
if (this.list.Count > max)
this.list.RemoveLast();
}
// Implement IEnumerable<T> by returning list's enumerator...
}
À peu près ce que j'allais dire; L'exemple ne serait-il pas addlast, supprimer
@MARC: Cela dépend de la façon dont vous voulez qu'il apparaisse ... pour que l'URM, le plus récent est typiquement d'abord ...
Je faisais simplement comparer la "liste contient" de l'exemple de la question à ce que Getenumerator () reviendrait. Dans la question, il est le plus vieux d'abord
Utilisez une classe personnalisée qui implémente IList fort> alors lors de la mise en oeuvre
Tout d'abord,
liste code> ou l'une des autres structures de données sont .NET i> Structures de données, pas C # i> Structures de données, mais non, mais non, mais non, .NET n'a pas une telle structure de données intégrée qui fera tout i> de cela automatiquement. Vous pouvez toutefois utiliser une queue ou un linkedlist code> et un code supplémentaire pour supprimer des éléments supplémentaires une fois que vous avez atteint la limite. Comme @ lassev.karlsen a déclaré qu'il n'y avait pas une telle chose, mais vous pouvez hériter d'une liste ou d'une file d'attente pour faire votre propre classe qui fonctionne comme vous le souhaitez. Ce n'est pas si difficile de cette façon.
Question similaire: