You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查并比较控制台用户输入?C#生日对比程序报错求助

问题修复:人类与宠物生日对比程序

错误原因与修复要点

  1. 静态方法调用错误
    BirthdayCheck是静态方法,不能通过类的实例对象调用,必须直接通过类名调用(或在同一类中直接调用方法名)。

  2. 未传递有效生日数据
    原代码调用BirthdayCheck时传了空字符串,完全没用到用户输入的人类和宠物生日,需要把human.Birthday和pet.Birthday作为参数传入。

  3. 属性冗余优化
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:25:15