我有一项任务,要求我创建产品和服务并将它们添加到包(列表)中。然后将每个包添加到包列表中。
我设法创建了一个服务和一个产品的包,但我打印列表时遇到问题,因为它会打印每个包中的所有项目的次数与包装一样多(例如,如果我添加3个包,它将打印每个产品和服务3次)。我很难为该做什么。
我运行了调试器,它显示q in p
foreach
正在运行4次而不是2次,但我不知道如何解决这个问题。
以下是Package
类的代码:
public class Package : AbstractProduct,IPackageble, IEnumerable,
{
public static List<AbstractProduct> package_elements = new List<AbstractProduct>();
public bool canAddToPackage(Package package)
{
return false;
}
public void Add_element(AbstractProduct elem)
{
package_elements.Add(elem);
}
public override string Description()
{
foreach (AbstractProduct f in package_elements)
{
String var = " ";
var = prod.Description();
}
return var;
}
AbstractProductManager
类:
public abstract class AbstractProductMgr
{
//The general list
protected static List<Package> elements = new List<Package>();
public static void WriteToConsole()
{
foreach(Package p in elements)
{
foreach (AbstractProduct q in p)
{
Console.WriteLine(q.Description());
}
}
}
AbstractProduct
是一个抽象类,它定义了产品/服务的属性以及列出它们的虚拟Description
方法。该类由Service
和Product
类继承,它们使用任何特定属性覆盖Description
方法。
产品/服务是在键盘中的自己的经理类中读取的。 PackageMgr
类调用产品/服务的插入方法,并将它们添加到Package列表,然后将Package
列表添加到Elements
列表。
答案 0 :(得分:1)
你有:
public static List<AbstractProduct> package_elements = new List<AbstractProduct>();
表示package_elements
类的所有实例之间共享Package
。您可能想要松开static
修饰符:
public List<AbstractProduct> package_elements = new List<AbstractProduct>();
答案 1 :(得分:1)
我运行了调试器,它显示p foreach中的q运行4次而不是2次但我不知道如何解决这个问题。
删除内部循环,因为Package
类将遍历其所有项目并打印它们。我评论了它。
foreach(Package p in elements)
{
// foreach (AbstractProduct q in p)
//{
Console.WriteLine(p.Description());
// }
}
您还应该将package_elements
设为私有,否则可以从外部添加内容。