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

C#使用IF语句校验DateTime类型生日与预设值匹配时报错如何解决

报错原因

你在if判断中直接写的1875,05,22不是合法的DateTime类型值,C#会将逗号识别为逗号运算符,最终会取最后一个数字22作为int类型值参与比较,自然就出现了DateTime和int类型无法用==比较的错误。
另外你当前的代码逻辑存在不合理的地方:你直接将用户输入的生日赋值给了person1.bday,会覆盖掉类中初始化的默认生日值,后续无法再拿到原始的默认值做校验。

解决步骤

  1. 不要覆盖实例的默认生日值,单独定义变量存储用户输入的日期
  2. 比较时右侧也要构造DateTime类型的对象参与计算

修改后的代码如下:

Customer类无需调整

public class Customer
{
    public string Name;
    public int PinNumber = 2321;
    public double AccBalance = 250.00;
    public DateTime bday = new DateTime(1875,05,22);
}

主程序修改后代码

// 单独存储用户输入的生日,不覆盖实例默认值,同时兼容非法输入场景
if(DateTime.TryParse(Console.ReadLine(), out DateTime inputBday))
{
    // 比较时右侧也构造DateTime对象,或者直接和person1的初始bday比较
    if (inputBday == person1.bday)
    {
        Console.WriteLine("生日校验通过");
    }
    else
    {
        Console.WriteLine("生日不匹配");
    }
}
else
{
    Console.WriteLine("输入的日期格式不合法,请输入年/月/日或月/日/年格式的日期");
}

优化建议

如果这个默认生日是所有Customer实例统一的校验基准,可以将它设置为静态只读字段,避免被实例修改,校验逻辑更稳定:

public class Customer
{
    public string Name;
    public int PinNumber = 2321;
    public double AccBalance = 250.00;
    // 静态默认生日,所有实例共享,无法被修改
    public static readonly DateTime DefaultBday = new DateTime(1875,05,22);
    public DateTime bday = DefaultBday;
}

校验时直接调用静态字段即可:

if (inputBday == Customer.DefaultBday)
{
    // 校验通过逻辑
}

内容的提问来源于stack exchange,提问作者Carl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:08