C#中IF与ELSE语句同时执行的问题排查求助
宠物诊所控制台应用逻辑错误修复
问题现象
创建主人对象后,使用该主人名称添加宠物时,控制台同时输出以下两个内容:
Owner does not exist.Pet [宠物名] added to owner [主人名] successfully.
核心错误原因
- Owner类的列表设计错误:每个
Owner实例都维护独立的owners集合,业务逻辑上所有主人应该共享同一个全局列表,而非每个主人自身存储一份。当通过FindOwnerByName获取到目标主人后,该主人实例的owners列表是空的(每个Owner构造时都会初始化新的空列表)。 - Pet类的判断逻辑错误:
CreatePet方法中!owner.owners.Contains(owner)的判断毫无意义,它检查的是目标主人自己的列表是否包含自己,而非验证该主人是否存在于全局主人列表中。
代码修复方案
1. 重构Owner类(将主人列表改为静态)
namespace Pet_Clinic.Model { public class Owner { public string belongsTo { get; set; } public string Address { get; set; } public string PhoneNumber { get; set; } public string Email { get; set; } // 改为静态列表,所有Owner实例共享同一个主人集合 public static List<Owner> owners = new List<Owner>(); public Owner() { // 静态列表无需在构造函数中重复初始化 } public override string ToString() { return $"{belongsTo} - {Address} - {PhoneNumber} - {Email}"; } public void CreateOwner(string name, string address, string email, string phonenumber) { Owner newOwner = new Owner() { belongsTo = name, Address = address, Email = email, PhoneNumber = phonenumber, }; owners.Add(newOwner); } public Owner FindOwnerByName(string ownerName) { // 使用Linq简化查找逻辑,也可以保留原foreach写法 return owners.FirstOrDefault(owner => owner.belongsTo == ownerName); } } }
2. 修正Pet类的CreatePet方法
namespace Pet_Clinic.Model { public class Pet { public string Name { get; set; } public string Breed { get; set; } public int Age { get; set; } public Owner Owner { get; set; } public List<Pet> petList = new List<Pet>(); public override string ToString() { return $"Name: {Name} Breed: {Breed} Age: {Age} Owner: {Owner}"; } public void CreatePet(string name, string breed, int age, Owner owner) { // 主方法中已验证owner不为null,若需双重验证则检查全局静态列表 if (!Owner.owners.Contains(owner)) { Console.WriteLine("Owner does not exist."); return; } Pet newPet = new Pet { Name = name, Breed = breed, Age = age, Owner = owner, }; petList.Add(newPet); } } }
3. 可选:优化主方法的输入容错
避免因输入非数字导致程序崩溃,替换int.Parse为int.TryParse:
// 替换主方法中获取选项的代码段 Console.Write("Pick an option: "); int choice; if (!int.TryParse(Console.ReadLine(), out choice)) { Console.WriteLine("请输入有效的数字选项。"); Console.Write("Press enter to return to menu: "); Console.ReadLine(); continue; }
修复后效果
创建主人并添加宠物时,控制台只会输出成功提示,不会再出现错误的"Owner does not exist."信息。
内容的提问来源于stack exchange,提问作者xAndrula
相关产品推荐
相关产品推荐

