嘿所以我需要设计一个程序,可以将公司的皮卡或交货添加到我的课程列表中,我已经制作了一个名为访问的列表,如下所示。
我想知道如何将每个提货或交货添加到列表中,以便能够区分最初的内容,以便我可以显示仅提货或仅提供交货。
class List
{
/*
* This object represents the List. It has a 1:M relationship with the Visit class
*/
private List<Visits> visits = new List<Visits>();
//List object use to implement the relationshio with Visits
public void addVisits(Visits vis)
{
//Add a new Visit to the List
visits.Add(vis);
}
public List<String> listVisits()
{//Generate a list of String objects, each one of which represents a Visit in List.
List<String> listVisits = new List<string>();
//This list object will be populated with Strings representing the Visits in the lists
foreach (Visits vis in visits)
{
String visAsString = vis.ToString();
//Get a string representing the current visit object
listVisits.Add(visAsString);
//Add the visit object to the List
}
return listVisits;
//Return the list of strings
}
public Visits getVisits(int index)
{
//Return the visit object at the <index> place in the list
int count = 0;
foreach (Visits vis in visits)
{
//Go through all the visit objects
if (index == count)
//If we're at the correct point in the list...
return vis;
//exit this method and return the current visit
count++;
//Keep counting
}
return null;
//Return null if an index was entered that could not be found
}
显示代码
/*
* Update the list on this form the reflect the visits in the list
*/
lstVisits.Items.Clear();
//Clear all the existing visits from the list
List<String> listOfVis = theList.listVisits();
//Get a list of strings to display in the list box
lstVisits.Items.AddRange(listOfVis.ToArray());
//Add the strings to the listBox. Note to add a list of strings in one go we have to
//use AddRange and we have to use the ToArray() method of the list that we are adding
答案 0 :(得分:1)
看起来你有Pickup
和Delivery
继承了一个名为Visits
* 的公共类。
更改Visits
以提供区分访问类型的方法,例如:
enum VisitKind {
Pickup,
Delivery
}
public class Visits {
public VisitKind KindOfVisit {get;private set;}
protected Visits(VisitKind kind) {
KindOfVisit = kind;
}
}
现在修改Pickup
和Delivery
的构造函数,将正确的类型传递给超类的构造函数,如下所示:
public class Pickup : Visits {
public Pickup() : base(VisitKind.Pickup) {}
}
public class Delivery : Visits {
public Delivery() : base(VisitKind.Delivery) {}
}
现在,您可以检查KindOfVisit
和Pickup
共有的Delivery
属性,以便在运行时告知访问类型:
public IList<Delivery> GetDeliveries() {
var res = new List<Delivery>();
foreach (var v in visits) {
if (v.KindOfVisit == VisitKind.Delivery) {
res.Add((Delivery)v);
}
}
return res;
}
此解决方案并不理想,因为当有人添加新访问时,处理访问的代码将继续照常编译。但是,解决此问题的方法比添加属性要困难得多:一种解决方案是使用Visitor Pattern,这比简单的Kind
属性更好,但它有自己的局限性。
<小时/> * 用复数名词命名一个类是非常规的 -
Visit
可能是一个更好的名字。
答案 1 :(得分:0)
在Visits类中添加一个参数,用于跟踪它是拾取还是传递,并在Visits类中添加getType()/ setType()方法以检索它是哪种类型