如何检查并比较控制台用户输入?C#生日对比程序报错求助
问题修复:人类与宠物生日对比程序
错误原因与修复要点
静态方法调用错误
BirthdayCheck是静态方法,不能通过类的实例对象调用,必须直接通过类名调用(或在同一类中直接调用方法名)。未传递有效生日数据
原代码调用BirthdayCheck时传了空字符串,完全没用到用户输入的人类和宠物生日,需要把human.Birthday和pet.Birthday作为参数传入。属性冗余优化
Human和Pet类里手动定义了backing field(userResponse1/userResponse2)和属性,其实可以用C#自动属性简化代码,同时保证数据访问的正确性。
修正后的完整代码
using System; namespace MyApplication { class Program { static void Main(string[] args) { Human human = new Human(); human.name(); human.age(); human.id(); human.birthday(); Robot robot = new Robot(); robot.id(); robot.model(); Pet pet = new Pet(); pet.name(); pet.birthday(); // 直接调用静态方法,传入实际的生日数据 BirthdayCheck(human.Birthday, pet.Birthday); } public static void BirthdayCheck(string humanBirthday, string petBirthday) { if (string.Equals(humanBirthday, petBirthday, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine($"匹配到相同生日:{humanBirthday}"); } else { Console.WriteLine("无匹配生日"); } } interface IHuman { void name(); void age(); void id(); void birthday(); } interface IRobot { void model(); void id(); } interface IPet { void name(); void birthday(); } class Human : IHuman { // 使用自动属性替代手动backing field public string Birthday { get; set; } public void name() { Console.WriteLine("Citizen name: "); Console.ReadLine(); } public void age() { Console.WriteLine("Citizen's age: "); Console.ReadLine(); } public void id() { Console.WriteLine("Citizen's id: "); Console.ReadLine(); } public void birthday() { Console.WriteLine("Citizen's birthday: "); // 直接给属性赋值 Birthday = Console.ReadLine(); } } class Robot : IRobot { public void model() { Console.WriteLine("Enter Robot Model: "); Console.ReadLine(); } public void id() { Console.WriteLine("Enter Robot Id: "); Console.ReadLine(); } } class Pet : IPet { // 使用自动属性 public string Birthday { get; set; } public void name() { Console.WriteLine("Enter pet name: "); Console.ReadLine(); } public void birthday() { Console.WriteLine("Enter pet birthday: "); // 直接给属性赋值 Birthday = Console.ReadLine(); } } } }
关键修改说明
- 静态方法调用:删除了
Program实例创建代码,直接调用BirthdayCheck(human.Birthday, pet.Birthday),传入用户实际输入的生日数据。 - 自动属性简化:把
Human和Pet中的userResponse字段和手动属性替换为自动属性public string Birthday { get; set; },代码更简洁且符合C#最佳实践。 - 字符串比较优化:用
string.Equals(..., StringComparison.OrdinalIgnoreCase)替代直接==,避免大小写敏感的问题(如果需要严格匹配可以改回==)。 - 数据传递修正:确保用户输入的生日被正确存储到
Birthday属性中,再传递给检查方法完成对比逻辑。
内容的提问来源于stack exchange,提问作者Dari Popov
相关产品推荐
相关产品推荐

