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

如何解决C#编译器提示字段从未被赋值、始终为默认值的问题

问题原因
  • 私有字段_dateTime添加了readonly修饰符,该修饰符限制字段只能在类的构造函数中赋值,属性的set方法中无法修改它的值
  • ProductExpirationDate属性的set逻辑中没有接收传入的赋值(没有用到setter的隐式参数value),也没有给_dateTime字段赋值,导致_dateTime永远是DateTime类型的默认值0001/1/1 0:00:00,和你传入的参数无关
  • 原判断逻辑存在错误:判断时使用的是未赋值的_dateTime,而不是你传入的新值,永远会触发过期提示
修复方案
  1. 移除_dateTime字段的readonly修饰符,允许在属性setter中修改字段值
  2. 在setter中先将传入的value赋值给_dateTime字段,保留你传入的过期日期
  3. 修正判断条件,用赋值后的_dateTime(或者直接用value)和当前时间比对,实现过期提示逻辑
修正后的Product类代码
public class Product : BaseEntity
{     
    public string ProductTitle { get; set; }
    public string ProductDescription { get; set; }

    // 移除readonly修饰符
    private DateTime _dateTime;
    public DateTime ProductExpirationDate
    {
        get { return _dateTime; }
        set
        {
            // 先赋值保存传入的过期日期
            _dateTime = value;
            // 修正判断逻辑,比对当前时间和新设置的过期日期
            if (DateTime.Now >= _dateTime)
            {
                Console.WriteLine("Product past the expiration date!");
            } 
        }
    }
}

修改后重新运行,ProductExpirationDate就会正常输出你设置的2011/8/9 4:05:02,同时会触发过期提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:48:01