如何解决C#编译器提示字段从未被赋值、始终为默认值的问题
问题原因
- 私有字段
_dateTime添加了readonly修饰符,该修饰符限制字段只能在类的构造函数中赋值,属性的set方法中无法修改它的值 ProductExpirationDate属性的set逻辑中没有接收传入的赋值(没有用到setter的隐式参数value),也没有给_dateTime字段赋值,导致_dateTime永远是DateTime类型的默认值0001/1/1 0:00:00,和你传入的参数无关- 原判断逻辑存在错误:判断时使用的是未赋值的
_dateTime,而不是你传入的新值,永远会触发过期提示
修复方案
- 移除
_dateTime字段的readonly修饰符,允许在属性setter中修改字段值 - 在setter中先将传入的
value赋值给_dateTime字段,保留你传入的过期日期 - 修正判断条件,用赋值后的
_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
相关产品推荐
相关产品推荐

