2009-03-24 49 views
7

Estoy tratando de limitar el tamaño de mi lista genérica para que después de que contenga una cierta cantidad de valores, no agregue más.Limite el tamaño de List (Of T) - VB.NET

Estoy tratando de hacer esto usando la propiedad Capacity del objeto List, pero esto no parece funcionar.

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

¿Cómo aconsejarían las personas limitar el tamaño de una lista?

Estoy tratando de evitar verificar el tamaño de la lista después de agregar cada objeto.

Respuesta

9

Hay varias maneras diferentes de agregar cosas a un List<T>: Añadir, AddRange, Insertar, etc.

considerar una solución que hereda 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 esta manera la capacidad si se respeta usted Add o Insert.

14

No hay una forma incorporada de limitar el tamaño de una Lista (De T). La propiedad Capacidad simplemente modifica el tamaño del búfer subyacente, sin restringirlo.

Si desea limitar el tamaño de la lista, deberá crear un contenedor que verifique el tamaño no válido. Por ejemplo

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 
0

Debe implementar su propia lista/colección si necesita restringir la cantidad máxima de elementos en ella.

0

La lista no tiene tal facilidad.

El capacity stuff es solo una optimización del rendimiento.

Vas a tener que sacar tu propia clase, derivar de la lista y anular la implementación Agregar.

5

Querrá obtener un nuevo LimitedList y sombrear los métodos de adición. Algo como esto te ayudará a comenzar.

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); 
    } 
} 

di cuenta de que estás en VB, traduciré poco

Editar Ver Jared para una versión VB. Dejaré esto aquí en caso de que alguien quiera una versión de C# para empezar.

Por lo que vale la mía toma un enfoque ligeramente diferente, ya que amplía la clase List en lugar de encapsularla. El enfoque que quieres usar depende de tu situación.

+1

Sin embargo, su solución causará problemas porque aún es posible que las personas omitan el nuevo método Add y utilicen el anterior. – JaredPar

+0

Sí, mi breve ejemplo no está completo. Al igual que su breve ejemplo no le permite acceder a la lista subyacente. Solo estaba mostrando un enfoque diferente. –

Cuestiones relacionadas