문제

내 일반 목록의 크기를 제한하여 일정량의 값이 포함 된 후에는 더 이상 추가되지 않도록 노력하고 있습니다.

목록 객체의 용량 속성을 사용 하여이 작업을 수행하려고하지만 이것은 작동하지 않는 것 같습니다.

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

사람들이 목록의 크기를 제한하는 조언은 어떻게 어울릴까요?

각 객체가 추가 된 후 목록의 크기를 확인하지 않으려 고합니다.

도움이 되었습니까?

해결책

물건을 추가하는 몇 가지 방법이 있습니다. List<T>: 추가, 추가 레인지, 삽입물 등

상속되는 솔루션을 고려하십시오 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

이런 식으로 용량은 당신을 존중합니다 Add 또는 Insert.

다른 팁

목록의 크기를 제한하는 내장 방법은 없습니다 (t). 용량 특성은 단지 언더 시스템 버퍼의 크기를 수정하여 제한하지 않습니다.

목록의 크기를 제한하려면 잘못된 크기를 확인하는 래퍼를 만들어야합니다. 예를 들어

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

당신은 새로운 것을 도출하고 싶을 것입니다 LimitedList 그리고 추가 방법을 섀도 웁니다. 이와 같은 것이 당신을 시작하게 할 것입니다.

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

당신이 VB에 있다는 것을 깨달았습니다. 곧 번역하겠습니다

편집하다 VB 버전은 Jared 's를 참조하십시오. 누군가 C# 버전을 시작하기를 원할 경우 여기에 남겨 두겠습니다.

내 가치가있는 것에 대해 내 목록 클래스를 캡슐화하는 대신리스트 클래스를 확장하기 때문에 약간 다른 접근 방식을 취합니다. 사용하려는 접근 방식은 상황에 따라 다릅니다.

최대 품목의 품목을 제한 해야하는 경우 자신의 목록/수집을 구현해야합니다.

목록에는 그러한 시설이 없습니다.

그만큼 용량 성능 최적화 일뿐입니다.

당신은 당신의 자신의 클래스를 롤하고, 목록을 도출하고, 구현 추가를 무시해야한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top