如何在Console App中实现List对象新增、自动命名及指定对象属性修改?
实现方案
你可以按以下步骤修改代码实现需求:
1. 改造Boats类实现自动命名
首先给Boats类添加静态计数器、名称属性,统一管理船只列表,保证生成的名称唯一不重复:
public class Boats { // 静态计数器,全局统计船只总数 private static int _boatCount = 0; // 静态存储所有船只的列表 public static List<Boats> BoatList { get; private set; } = new List<Boats>(); // 船只名称属性,初始化时自动赋值 public string Name { get; } // 船只速度属性 public int Speed { get; set; } public Boats() { // 每新建一个实例,计数器+1,生成对应名称 _boatCount++; Name = $"boat{_boatCount}"; } // 新增船只到列表的方法 public void AddBoatList(Boats boat) { BoatList.Add(boat); Console.WriteLine($"\n已成功创建新船:{boat.Name}"); } // 修正后的新建船只交互方法 public static void NewBoat() { Console.WriteLine("\n如果需要创建新船,请按下+键"); if (Console.ReadKey().KeyChar == '+') { var newBoat = new Boats(); newBoat.AddBoatList(newBoat); } else { Console.WriteLine("\n输入无效"); } } }
注意:原来的
NewBoat方法里重复实例化了两次Boats对象,这里已经做了冗余删除。
2. 实现按名称修改船只速度的功能
你可以新增一个静态方法实现按名称匹配船只,修改速度:
public static void ModifyBoatSpeed() { Console.WriteLine("\n请输入要修改速度的船只名称:"); string targetName = Console.ReadLine()?.Trim() ?? string.Empty; // 从列表中匹配名称一致的船只 var targetBoat = BoatList.FirstOrDefault(b => b.Name.Equals(targetName, StringComparison.OrdinalIgnoreCase)); if (targetBoat == null) { Console.WriteLine("未找到对应名称的船只"); return; } Console.WriteLine($"请输入{targetBoat.Name}的新速度:"); if (int.TryParse(Console.ReadLine(), out int newSpeed)) { targetBoat.Speed = newSpeed; Console.WriteLine($"修改成功,{targetBoat.Name}当前速度为:{targetBoat.Speed}"); } else { Console.WriteLine("输入的速度格式无效"); } }
3. 初始化及调用示例
在Program的主逻辑中按以下方式初始化和调用即可:
// 初始化前两艘船,会自动命名为boat1、boat2 Boats boat1 = new Boats(); boat1.Speed = 15; Boats boat2 = new Boats(); boat2.Speed = 26; // 添加到全局列表 Boats.BoatList.Add(boat1); Boats.BoatList.Add(boat2); // 调用新建船功能 Boats.NewBoat(); // 调用修改速度功能 Boats.ModifyBoatSpeed();
内容的提问来源于stack exchange,提问作者kungkhalifa
相关产品推荐
相关产品推荐

