C# 列表在循环和开关语句中被覆盖

C# 列表在循环和开关语句中被覆盖,c#,list,loops,class,switch-statement,C#,List,Loops,Class,Switch Statement,我需要帮助。我不知道如何解释我的问题。我以前试过发一次帖子,但它被关闭了,因为我无法真正解释我的问题。 我正在尝试创建一个应用程序,用户在其中输入汽车值,例如汽车ID、汽车容量(单位:千克)和汽车注册号。 我声明这样一个类: 公车 { 公共字符串ID{get;set;} 公共字符串capacityKg{get;set;} 公共字符串reachKm{get;set;} 公共字符串注册号{get;set;} } 然后我在代码中的循环外声明我的列表和类,如下所示: List allCars=新列表(

我需要帮助。我不知道如何解释我的问题。我以前试过发一次帖子,但它被关闭了,因为我无法真正解释我的问题。 我正在尝试创建一个应用程序,用户在其中输入汽车值,例如汽车ID、汽车容量(单位:千克)和汽车注册号。 我声明这样一个类:

公车
{
公共字符串ID{get;set;}
公共字符串capacityKg{get;set;}
公共字符串reachKm{get;set;}
公共字符串注册号{get;set;}
}
然后我在代码中的循环外声明我的列表和类,如下所示:

List allCars=新列表();
汽车=新车();
然后,我在switch语句中使用do while循环,这样每次都可以从用户处获取值:

do
{
车辆=新车();
写(“ID:”);
vehicle.ID=ReadLine();
写入(“容量(kg):”;
vehicle.capacityKg=ReadLine();
写下(“到达(公里):”;
vehicle.reachKm=ReadLine();
填写(“注册号:”);
vehicle.registrationNumber=ReadLine();
清除();
写线($“ID:{vehicle.ID}”);
写线($“容量(kg):{vehicle.capacityKg}”);
写线($“到达(公里):{vehicle.reachKm}”);
WriteLine($“注册号:{vehicle.registrationNumber}”);
书写线(“”);
WriteLine(“这是否正确?(Y)es(N)o”);
ConsoleKeyInfo yesNo=ReadKey(真);
if(yesNo.Key==ConsoleKey.Y)
{
所有车辆。添加(车辆);
清除();
WriteLine(“已注册的交付单位”);
《睡眠》(2000年);
清除();
打破
}
else if(yesNo.Key==ConsoleKey.N)
{
清除();
}
其他的
{
清除();
WriteLine(“按下无效键”);
《睡眠》(2000年);
清除();
}
}而(无效证件),;
但当我迭代列表时,我希望输出如下:

  • 车号:ABC123
  • 车号:ABC345
但是,当用户输入一个新值时,它会得到如下输出:

  • 车号:ABC345
  • 车号:ABC345
这意味着上一个值将被新值覆盖。 我不想那样

下面是我迭代列表以在控制台上打印值的部分:

Clear();
写入(“按ID搜索汽车:”;
字符串searchForCar=ReadLine();
如果(vehicle.ID==searchForCar)
{
foreach(所有车辆的var veh)
{
WriteLine(“找到的值”);
//在这里写下你想显示的所有信息。
写线($“ID:{vehicle.ID}”);
写线($“容量(kg):{vehicle.capacityKg}”);
写线($“到达(公里):{vehicle.reachKm}”);
WriteLine($“注册号:{vehicle.registrationNumber}”);
}
}
其他的
{
WriteLine(“未找到单位”);
}
ReadKey(true);
清除();
打破

我已经测试了您的代码,它运行良好

static void Main(字符串[]args)
{
列出所有车辆=新列表();
汽车=新车();
做
{
车辆=新车();
控制台写入线(“ID:”);
vehicle.ID=Console.ReadLine();
控制台写入线(“KG”);
vehicle.capacityKg=控制台.ReadLine();
控制台写入线(“km”);
vehicle.reachKm=Console.ReadLine();
控制台。WriteLine(“编号:”);
vehicle.registrationNumber=控制台.ReadLine();
控制台。写入线(“正确?”);
ConsoleKeyInfo yesNo=Console.ReadKey(true);
if(yesNo.Key==ConsoleKey.Y)
{
所有车辆。添加(车辆);
}
else if(yesNo.Key==ConsoleKey.N)
{
gotCars=false;
}
}while(gotCars);
foreach(所有车辆中的车辆项目)
{
Console.Write(item.registrationNumber+“”+item.ID);
}
Console.Read();
}

我的列表输出是
Car123-Car456-Car789
(如果输入正确)

我已经测试了您的代码,它工作正常

static void Main(字符串[]args)
{
列出所有车辆=新列表();
汽车=新车();
做
{
车辆=新车();
控制台写入线(“ID:”);
vehicle.ID=Console.ReadLine();
控制台写入线(“KG”);
vehicle.capacityKg=控制台.ReadLine();
控制台写入线(“km”);
vehicle.reachKm=Console.ReadLine();
控制台。WriteLine(“编号:”);
vehicle.registrationNumber=控制台.ReadLine();
控制台。写入线(“正确?”);
ConsoleKeyInfo yesNo=Console.ReadKey(true);
if(yesNo.Key==ConsoleKey.Y)
{
所有车辆。添加(车辆);
}
else if(yesNo.Key==ConsoleKey.N)
{
gotCars=false;
}
}while(gotCars);
foreach(所有车辆中的车辆项目)
{
Console.Write(item.registrationNumber+“”+item.ID);
}
Console.Read();
}

我的列表输出是
Car123-Car456-Car789
(如果输入正确)

请添加您在列表中迭代的部分并打印列表值。好的,请稍等片刻,我想它需要
allCars.add(vehicle)
。在任何地方都看不到它。@LocEngineer,它在Do-while循环的第一个if中。我在if语句中有allCars.Add(vehicle),因此如果用户选择“Y”,就会提示用户这是否是正确的信息输入它会被添加请添加你在列表中迭代的部分并打印出列表值。好的,请确定一秒钟我想它需要一个
allCars.add(vehicle)
。在任何地方都看不到。@LocEngineer,它在Do-while循环的第一个if中。我在if语句中有allCars.Add(vehicle),因此如果用户选择了“Y”,则会提示用户这是否是正确的信息输入