C#使用IF语句校验DateTime类型生日与预设值匹配时报错如何解决
报错原因
你在if判断中直接写的1875,05,22不是合法的DateTime类型值,C#会将逗号识别为逗号运算符,最终会取最后一个数字22作为int类型值参与比较,自然就出现了DateTime和int类型无法用==比较的错误。
另外你当前的代码逻辑存在不合理的地方:你直接将用户输入的生日赋值给了person1.bday,会覆盖掉类中初始化的默认生日值,后续无法再拿到原始的默认值做校验。
解决步骤
- 不要覆盖实例的默认生日值,单独定义变量存储用户输入的日期
- 比较时右侧也要构造
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
相关产品推荐
相关产品推荐

