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,您可能会这样做。

另一种方法是通过轮询。但是,这不会阻止您进入无效状态。只有当你进入它时它才会告诉你。

列表本身不支持请求的功能。

于 2012-12-04T10:32:41.340 回答