C# 添加项目';在C中动态地列出#

C# 添加项目';在C中动态地列出#,c#,list,C#,List,所以我试图在列表中获取输入项,但它只添加了一个项 我做错了什么 public void AddItems(List<Things> thing) { Console.Write("\nEnter Product ID : "); int choice = Convert.ToInt32(Console.ReadLine()); Console.Write("\nEnter Quantity : "); int quantity = Convert.T

所以我试图在列表中获取输入项,但它只添加了一个项

我做错了什么

public void AddItems(List<Things> thing)
 {
    Console.Write("\nEnter Product ID : ");
    int choice = Convert.ToInt32(Console.ReadLine());
    Console.Write("\nEnter Quantity : ");
    int quantity = Convert.ToInt32(Console.ReadLine());
    var item = thing.FirstOrDefault(i => i.ID == choice);

   if (item.ID == choice)
     {
       List<SelectedThing> selectedthing = new List<SelectedThing>();
       {
          var total = item.Price * quantity;
          selectedthing.Add(new SelectedProduct(this.ID = item.ID, this.Price = item.Price, this.Quantity = quantity, this.Name = item.Name));
          foreach (var items in selectedthing)
           {
             Console.WriteLine("\nYou Selected {0} and {1} quantity.Total Is {2:C}\n", items.Name, quantity, total);
            }
        }
   }
Console.WriteLine("\nWant To Add More Item..?? Press Y for Yes or E to End \n");
Console.Write("\nYour Option  : ");
string repeat = Console.ReadLine().ToLower();
 if (repeat == "y")
 {
   AddItems(thing);
  }
}
public void AddItems(列表内容)
{
控制台。写入(“\n输入产品ID:”);
int choice=Convert.ToInt32(Console.ReadLine());
控制台。写入(“\n输入数量:”);
int quantity=Convert.ToInt32(Console.ReadLine());
var item=thing.FirstOrDefault(i=>i.ID==choice);
if(item.ID==选项)
{
List selectedthing=新建列表();
{
var总计=项目价格*数量;
selectedthing.Add(新SelectedProduct(this.ID=item.ID,this.Price=item.Price,this.Quantity=Quantity,this.Name=item.Name));
foreach(所选内容中的var项目)
{
Console.WriteLine(“\n您选择了{0}和{1}数量。总数为{2:C}\n”,items.Name,quantity,Total);
}
}
}
Console.WriteLine(“\n要添加更多项..?按Y表示是,或按E表示结束\n”);
控制台。写入(“\n您的选项:”);
字符串repeat=Console.ReadLine().ToLower();
如果(重复==“y”)
{
附加项(事物);
}
}

现在,当按下y键后重复该过程时,它不会在列表中再添加一个项目,它只显示一个项目。

这是因为您每次都在创建列表的实例

List<SelectedThing> selectedthing = new List<SelectedThing>();
List selectedthing=new List();
将其设为成员变量

List<SelectedThing> selectedthing = new List<SelectedThing>();
public void AddItems(List<Things> thing)
{
    Console.Write("\nEnter Product ID : ");
    int choice = Convert.ToInt32(Console.ReadLine());
    Console.Write("\nEnter Quantity : ");
    int quantity = Convert.ToInt32(Console.ReadLine());
    var item = thing.FirstOrDefault(i => i.ID == choice);

    if (item.ID == choice)
    {

        {
            var total = item.Price * quantity;
            selectedthing.Add(new SelectedProduct(this.ID = item.ID, this.Price = item.Price, this.Quantity = quantity, this.Name = item.Name));
            foreach (var items in selectedthing)
            {
                Console.WriteLine("\nYou Selected {0} and {1} quantity.Total Is {2:C}\n", items.Name, quantity, total);
            }
        }
    }
    Console.WriteLine("\nWant To Add More Item..?? Press Y for Yes or E to End \n");
    Console.Write("\nYour Option  : ");
    string repeat = Console.ReadLine().ToLower();
    if (repeat == "y")
    {
        AddItems(thing);
    }
}
List selectedthing=new List();
公共无效附加项(列表内容)
{
控制台。写入(“\n输入产品ID:”);
int choice=Convert.ToInt32(Console.ReadLine());
控制台。写入(“\n输入数量:”);
int quantity=Convert.ToInt32(Console.ReadLine());
var item=thing.FirstOrDefault(i=>i.ID==choice);
if(item.ID==选项)
{
{
var总计=项目价格*数量;
selectedthing.Add(新SelectedProduct(this.ID=item.ID,this.Price=item.Price,this.Quantity=Quantity,this.Name=item.Name));
foreach(所选内容中的var项目)
{
Console.WriteLine(“\n您选择了{0}和{1}数量。总数为{2:C}\n”,items.Name,quantity,Total);
}
}
}
Console.WriteLine(“\n要添加更多项..?按Y表示是,或按E表示结束\n”);
控制台。写入(“\n您的选项:”);
字符串repeat=Console.ReadLine().ToLower();
如果(重复==“y”)
{
附加项(事物);
}
}

每次调用该方法时,您当前正在创建一个新列表:

List<SelectedThing> selectedthing = new List<SelectedThing>();
List selectedthing=new List();
如果要向同一列表中添加新项,则还必须将该列表传递给该方法。比如:

public void AddItems(List<Things> thing, List<Things> basket)
{
    ....
    ....
    if (repeat == "y")
    {
        AddItems(thing, basket);
    }
}
public void AddItems(列表项、列表篮)
{
....
....
如果(重复==“y”)
{
附加项(东西、篮子);
}
}

使用
@kjbartel
的更好方法是在函数中使用这两个列表作为引用类型,即

public void AddItems(ref List<Things> thing, ref List<Things> basket)
{
    ....
    ....
    if (repeat == "y")
    {
        AddItems(ref thing, ref basket);
    }
}
public void AddItems(ref List thing,ref List basket)
{
....
....
如果(重复==“y”)
{
附加项(参考物、参考篮);
}
}
现在,创建新实例的问题已经解决。所有更改都是对同一实例进行的。
希望您能试试。

可能您正在将list对象的新实例传递给AddItems方法。我可以通过任何方式添加list中添加的所有项的总数。喜欢而不是显示每个项目的总计。显示所有项目的总计。