2013-02-05 3 views
3

Existe-t-il une classe de liste/collection dans .NET qui se comporte comme un fichier journal tournant? L'utilisateur peut y ajouter des éléments, mais la liste supprimera automatiquement les anciens éléments si la capacité maximale est dépassée. Je souhaite également accéder à n'importe quel élément de la liste, par ex. list [102], etc.Liste déroulante dans .net

+4

Non intégré, mais cela est trivial dans l'extrême pour vous mettre en œuvre. –

Répondre

0

La classe standard de Microsoft n'existe pas pour vous. Mais vous pouvez regarder la file d'attente <> classe.
Un problème que la file d'attente <> développer automatiquement la classe. Vous pouvez résoudre le problème dans ce fil Limit size of Queue<T> in .NET?

Accès à tout élément pouvant être étendu par la méthode. Par exemple:

LogItem result = collection.Where(x => x.ID == 100).FirstOrDefault(); 
+0

La réponse acceptée dans ce fil a un problème sérieux (discuté dans les commentaires) –

0

Je suggère d'utiliser un cadre de l'exploitation forestière comme NLog.

2

Voici une implémentation simple pour cela:

public class LimitList<T> : IEnumerable<T> 
{ 
    private LinkedList<T> _list = new LinkedList<T>(); 

    public LimitList(int maximumCount) 
    { 
     if (maximumCount <= 0) 
      throw new ArgumentException(null, "maximumCount"); 

     MaximumCount = maximumCount; 
    } 

    public int MaximumCount { get; private set; } 

    public int Count 
    { 
     get 
     { 
      return _list.Count; 
     } 
    } 

    public void Add(T value) 
    { 
     if (_list.Count == MaximumCount) 
     { 
      _list.RemoveFirst(); 
     } 
     _list.AddLast(value); 
    } 

    public T this[int index] 
    { 
     get 
     { 
      if (index < 0 || index >= Count) 
       throw new ArgumentOutOfRangeException(); 

      return _list.Skip(index).First(); 
     } 
    } 

    public IEnumerator<T> GetEnumerator() 
    { 
     return _list.GetEnumerator(); 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 
Questions connexes