Limiter la taille de la liste (de T) - VB.NET
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é.
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.