Question

Je suis en train de limiter la taille de ma liste générique de sorte qu'après qu'il contient un certain nombre de valeurs, il ne sera pas ajouter plus.

Je suis en train de le faire en utilisant la propriété de la capacité de l'objet de la liste, mais cela ne semble pas fonctionner.

        Dim slotDates As New List(Of Date)
        slotDates.Capacity = 7

Comment les conseils des personnes en limitant la taille d'une liste?

Je suis en train d'éviter de vérifier la taille de la liste après chaque objet est ajouté.

Était-ce utile?

La solution

Il existe plusieurs façons d'ajouter des choses à un List<T>: Ajouter, AddRange, Insérer, etc

.

Considérons une solution qui hérite de Collection<T>:

Public Class LimitedCollection(Of T)
    Inherits System.Collections.ObjectModel.Collection(Of T)

    Private _Capacity As Integer
    Public Property Capacity() As Integer
        Get
            Return _Capacity
        End Get
        Set(ByVal value As Integer)
            _Capacity = value
        End Set
    End Property

    Protected Overrides Sub InsertItem(ByVal index As Integer, ByVal item As T)
        If Me.Count = Capacity Then
            Dim message As String = 
                String.Format("List cannot hold more than {0} items", Capacity)
            Throw New InvalidOperationException(message)
        End If
        MyBase.InsertItem(index, item)
    End Sub

End Class

De cette façon, la capacité est respectée si vous ou Add Insert.

Autres conseils

Il n'y a aucun moyen intégré pour limiter la taille d'une liste (de T). La propriété des capacités est simplement en train de modifier la taille de la mémoire tampon Sous-jacent, sans la restreindre.

Si vous voulez limiter la taille de la liste, vous devez créer un emballage qui vérifie la taille invalide de. Par exemple

Public Class RestrictedList(Of T)
  Private _list as New List(Of T)
  Private _limit as Integer
  Public Property Limit As Integer 
    Get 
      return _limit
    End Get
    Set 
      _limit = Value
    End Set
  End Property

  Public Sub Add(T value) 
    if _list.Count = _limit Then
      Throw New InvalidOperationException("List at limit")
    End If
    _list.Add(value)
  End Sub
End Class

Vous voulez tirer une nouvelle ombre et les LimitedList méthodes ajoutant. Quelque chose comme ça vous aider à démarrer.

public class LimitedList<T> : List<T>
{
    private int limit;

    public LimitedList(int limit)
    {
        this.limit = limit;
    }

    public new void Add(T item)
    {
        if (Count < limit)
            base.Add(item);
    }
}

Juste vous êtes rendu compte VB, je traduirai peu

Modifier Voir Jared pour une version VB. Je vais laisser cela ici au cas où quelqu'un veut une version C # pour commencer à utiliser.

Pour ce que ça vaut la mienne prend une approche légèrement différente, car elle étend la classe de liste plutôt que l'encapsulant. Quelle approche que vous voulez utiliser dépend de votre situation.

Vous devez implémenter votre propre liste / collection si vous devez limiter la quantité maximale de produit en elle.

Liste n'a pas un tel établissement.

Les choses est juste une optimisation des performances.

Vous allez devoir rouler votre propre classe, dérivez hors liste et passer outre la mise en œuvre Ajouter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top