限制2个单独列表的组合计数-C#
我在Visual 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
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语句限制一个列表的计数。。。我猜这会阻止用户向列表中添加另一个对象。我需要此消息来显示联合收割机