Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制2个单独列表的组合计数-C#_C#_List_Count - Fatal编程技术网

限制2个单独列表的组合计数-C#

限制2个单独列表的组合计数-C#,c#,list,count,C#,List,Count,我在Visual C#项目中有以下课程: public class Bus { private int BusNumber; public int busNumber { get { return BusNumber; } set { BusNumber = value; } } public List<CircularRoute> circularRoute = new List<Cir

我在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>();
    }
公共类总线
{
专用int总线号;
公共int总线号
{
获取{返回总线号;}
设置{BusNumber=value;}
}
public List circularRoute=新列表();
公共列表长距离=新列表();
}

有什么方法可以限制两个列表的总数?我知道,如果我使用多态列表,我可以使用if语句轻松地完成这项工作。不过,目前我还不能选择这个选项。

单独使用列表,不行。如果底层实现是一个可观察的集合,您可能会这样做

另一种方法是通过投票。但是,这并不能阻止您进入无效状态。它只会告诉你,一旦你进入它


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

使用列表本身不支持。如果底层实现是一个可观察的集合,您可能会这样做

另一种方法是通过投票。但是,这并不能阻止您进入无效状态。它只会告诉你,一旦你进入它


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

不,您不能限制列表的长度

您可以做什么-公开类型为
IEnumerable
的属性。和方法,用于从私有列表中添加或删除项。在这些方法上实现任何逻辑

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
}
公共类总线
{
专用int总线号;
私有列表循环rRoutes=新列表();
私有列表长距离=新列表();
private const int MaxTotalRoutes=10;
公共int总线号
{
获取{返回总线号;}
设置{busNumber=value;}
}
公共可数循环
{
获取{return circularRoutes;}
}
公共可数长途电话
{
获取{返回长距离;}
}
公共无效添加路由(循环路由)
{
if(circularRoutes.Count+longDistances.Count==MaxTotalRoutes)
{
//抛出异常,什么都不做,不管怎样
返回;
}
循环。添加(路线);
}
//添加用于添加和删除管线的方法
}

顺便说一句在C#中,属性名称使用PascalCase,字段使用camelCase。

不,不能限制列表的长度

您可以做什么-公开类型为
IEnumerable
的属性。和方法,用于从私有列表中添加或删除项。在这些方法上实现任何逻辑

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
}
公共类总线
{
专用int总线号;
私有列表循环rRoutes=新列表();
私有列表长距离=新列表();
private const int MaxTotalRoutes=10;
公共int总线号
{
获取{返回总线号;}
设置{busNumber=value;}
}
公共可数循环
{
获取{return circularRoutes;}
}
公共可数长途电话
{
获取{返回长距离;}
}
公共无效添加路由(循环路由)
{
if(circularRoutes.Count+longDistances.Count==MaxTotalRoutes)
{
//抛出异常,什么都不做,不管怎样
返回;
}
循环。添加(路线);
}
//添加用于添加和删除管线的方法
}

顺便说一句在C#中,我们使用PascalCase作为属性名称,camelCase作为字段。

不要将列表公开为公共列表-将它们保持为私有,并提供添加到每个列表的方法

在这些方法中,您可以检查两个列表的计数,并且仅在它们低于阈值时添加

如果需要公开列表,我建议返回这些私有列表的副本(使用副本构造函数),这样就不会违反不变量

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); }
}
private List circularRoute=new List();
公共添加路由(循环路由)
{
if(循环计数+长距离计数<阈值)
{
//添加逻辑。
}
其他的
{
//也许会抛出一个例外
}
}
公共可数循环
{
获取{返回新列表(循环箭头);}
}

不要将列表公开为公共-将它们保持为私有,并提供添加到每个列表的方法

在这些方法中,您可以检查两个列表的计数,并且仅在它们低于阈值时添加

如果需要公开列表,我建议返回这些私有列表的副本(使用副本构造函数),这样就不会违反不变量

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); }
}
private List circularRoute=new List();
公共添加路由(循环路由)
{
if(循环计数+长距离计数<阈值)
{
//添加逻辑。
}
其他的
{
//也许会抛出一个例外
}
}
公共可数循环
{
获取{返回新列表(循环箭头);}
}

列表是否也加入了?你想在允许的限度内分成50对50吗?限制计数?你是什么意思?你的意思是你希望组合列表中的项目总数永远不会超过某个阈值吗?是的,这就是我的意思。我可以使用类似于“if(circularrout.count>=5){MessageBox.Show(“blahblah”);}”的if语句限制一个列表的计数。。。我猜这会阻止用户向列表中添加另一个对象。我需要这条消息来显示两个列表的总和是否超过10。CircularRoute和LongDistanceRoute是否有一个共同的bsae类/接口?列表是否仍然加入?你想在允许的限度内分成50对50吗?限制计数?你是什么意思?你的意思是你希望组合列表中的项目总数永远不会超过某个阈值吗?是的,这就是我的意思。我可以使用类似于“if(circularrout.count>=5){MessageBox.Show(“blahblah”);}”的if语句限制一个列表的计数。。。我猜这会阻止用户向列表中添加另一个对象。我需要此消息来显示联合收割机