我怎么能这样做我的场只设置一次?

时间:2011-11-22 04:36:51

标签: c#

我的模型类中有一个字段,其编码如下:

    public string CreatedBy
    {
        get { return _CreatedBy; }
        set { _CreatedBy = value; Created = DateTime.Now; }
    }
    public DateTime? Created { get; set; }

填充CreatedBy字段后,它会自动填写创建日期。对我来说问题是,如果我再次设置CreatedBy字段(是的,它可以发生),那么日期会再次使用当前日期更新。

我有没有办法让它可以只创建一次CreatedBy和Created字段?

5 个答案:

答案 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