1

Visual C#プロジェクトに次のクラスがあります。

    public class Bus
    {
    private int BusNumber;
    public int busNumber
    {
        get { return BusNumber; }
        set { BusNumber = value; }
    }

    public List<CircularRoute> circularRoute = new List<CircularRoute>();
    public List<LongDistance> longDistance = new List<LongDistance>();
    }

両方のリストを組み合わせた数を制限する方法はありますか?多態的なリストを使用した場合、ifステートメントを使用してこれを簡単に実行できることを知っています。しかし、これは現時点では私にとっての選択肢ではありません。

4

3 に答える 3

2

いいえ、リストの長さを制限することはできません。

できること - 型のパブリック プロパティを作成しますIEnumerable<T>。プライベート リストの項目を追加または削除するメソッド。これらのメソッドに任意のロジックを実装します。

public class Bus
{
    private int busNumber;
    private List<CircularRoute> circularRoutes = new List<CircularRoute>();
    private List<LongDistance> longDistances = new List<LongDistance>(); 
    private const int MaxTotalRoutes = 10;

    public int BusNumber
    {
        get { return busNumber; }
        set { busNumber = value; }
    }

    public IEnumerable<CircularRoute> CircularRoutes
    {
        get { return circularRoutes; }
    }

    public IEnumerable<LongDistance> LongDistances
    {
        get { return longDistances; }
    }

    public void AddRoute(CircularRoute route)
    {
        if (circularRoutes.Count + longDistances.Count == MaxTotalRoutes)
        {
             // throw exception, do nothing, whatever 
             return;
        }

        circularRoutes.Add(route);
    }

    // add methods for adding and removing routes
}

ところで、C# では、プロパティの名前には PascalCase を使用し、フィールドにはキャメルケースを使用します。

于 2012-12-04T10:34:11.483 に答える
2

リストをパブリックとして公開しないでください。非公開にして、各リストに追加するメソッドを提供してください。

これらの方法では、両方のリストの数を確認し、それらがしきい値を下回っている場合にのみ追加できます。

リストを公開する必要がある場合は、 (コピー コンストラクターを使用して) これらのプライベート リストのコピーを返すことをお勧めします。これにより、不変条件に違反することはありません。

private List<CircularRoute> circularRoute = new List<CircularRoute>();

public AddRoute(CircularRoute route)
{
  if(circularRoute.Count + longDistance.Count < threshold)
  {
    // add logic.
  }
  else
  {
    // Perhaps throw an exception
  }
}

public IEnumerable<CircularRoute> CircularRoutes
{
   get { return new List<CircularRoute>(circularRoute); }
}
于 2012-12-04T10:34:44.357 に答える
0

リストを単独で使用することはできません。基礎となる実装が ObservableCollection である場合、潜在的にそれを行うことができます。

もう 1 つの方法は、ポーリングを使用することです。ただし、無効な状態になるのを防ぐことはできません。あなたがそれに入ったら、それはあなたにだけ教えてくれます。

リスト自体は、要求された機能をサポートしません。

于 2012-12-04T10:32:41.340 に答える