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

如何在C#的DateTime类型get;set属性中加入条件语句判断年龄是否满16

解决你的C# DateTime属性校验问题

我来帮你梳理下代码里的问题,咱们一步步修正:

1. 首先解决调用报错的问题

你在Main里写的dob.Dob()是错误的——Dob是属性,不是方法,不能用方法调用的括号语法。正确的用法是:

  • 获取值:var userBirthday = dob.Dob;
  • 赋值:dob.Dob = new DateTime(2007,12,1);

2. 修正年龄校验的逻辑漏洞

你当前的年份差判断太粗糙,只看年份会忽略月日的精确性。比如今天是2024年5月1日,用户生日是2008年6月1日,年份差是16,但实际用户还没满16岁,你的逻辑会误判。

正确的做法是直接判断「生日加上16年是否小于等于当前日期」,这样能精确校验是否满16岁。

3. 让构造函数也走校验逻辑

你原来的构造函数直接给私有字段_Dob赋值,跳过了set属性里的校验,这会导致不符合要求的生日也能创建对象。应该在构造函数里调用属性的set方法,让校验逻辑统一生效。


修正后的完整代码

Test类:

class Test {
    private DateTime _Dob;
    public DateTime Dob {
        get { return _Dob; }
        set {
            // 精确计算满16岁的日期
            var sixteenYearsThreshold = value.AddYears(16);
            if (sixteenYearsThreshold > DateTime.Now) {
                Console.WriteLine("Error: 年龄必须超过16岁");
                // 可选:如果需要强制报错,抛出异常更严谨
                // throw new ArgumentException("年龄必须超过16岁");
            } else {
                _Dob = value;
            }
        }
    }
    public Test(DateTime dob) {
        // 通过属性赋值,让构造时也执行校验
        Dob = dob;
    }
}

Main方法:

// 创建对象时会触发构造函数的校验
Test testUser = new Test(new DateTime(2007,12,01));
// 正确获取属性值
Console.WriteLine($"用户生日:{testUser.Dob:yyyy-MM-dd}");

// 尝试赋值一个未满16岁的生日,会触发错误提示
testUser.Dob = new DateTime(2009, 1, 1);

Console.ReadLine();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:48:25