我的模型类中有一个字段,其编码如下:
public string CreatedBy
{
get { return _CreatedBy; }
set { _CreatedBy = value; Created = DateTime.Now; }
}
public DateTime? Created { get; set; }
填充CreatedBy字段后,它会自动填写创建日期。对我来说问题是,如果我再次设置CreatedBy字段(是的,它可以发生),那么日期会再次使用当前日期更新。
我有没有办法让它可以只创建一次CreatedBy和Created字段?
答案 0 :(得分:2)
你不能在集合中检查是否已有值并且根本没有设置新值吗?
答案 1 :(得分:1)
使用构造函数并将属性初始化为您想要的默认值
public classConstructor()
{
propertyName = defaultValue;
}
答案 2 :(得分:1)
使用支持字段并检查该值是否已设置 - 如果已设置,请保持不变:
private DateTime? created;
public DateTime? Created
{
get { return created; }
set { if (created == null) created = value; }
}
答案 3 :(得分:1)
这是一个快速的方法:使用??运营商。如果Created为null,则它将转到DateTime.Now。
public string CreatedBy
{
get { return _CreatedBy; }
set { _CreatedBy = value; Created = Created ?? DateTime.Now; }
}
public DateTime? Created { get; set; }
答案 4 :(得分:1)
在这种情况下,最好在构造函数中包含CreatedBy
。这意味着“创建时间”语义:
public string CreatedBy
{
get;
private set;
}
public DateTime? Created
{
get;
private set;
}
public Model(..., string createdBy)
{
this.CreatedBy = createdBy;
this.Created = DateTime.Now;
}
// another option, if you don't like the ctor route
public void AssignCreator(string createdBy)
{
if (this.Created.HasValue) throw new InvalidOperationException();
this.CreatedBy = createdBy;
this.Created = DateTime.Now;
}
如果InvalidOperationException
非空,那么您的另一个选择是在属性设置器中抛出Created
。