C# 9.0 记录具有不可为空属性但具有默认值的构造函数

lrh*_*h09 2 .net c# .net-core

我试图为以下内容定义一个记录类型,而不是一个类

public class Contact
{
    public string Name {get;set;}
    public string Email {get;set;}
    public string PhoneNo  {get;set;}
    public DateTime UpdatedAt {get;set;} = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)

由于UpdatedAt是一个不可为空的字段,如果我使用记录的最基本的构造函数,我们DateTime.Now每次调用记录时都需要传递。还有其他方法吗?而不是这样做:

public record Contact(string Name, string Email,string PhoneNo, DateTime UpdatedAt);

var records = new Contact("My Name", "a@abc.com", "123456", DateTime.Now)
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 7

您可以为一种record类型提供一个构造函数,因此添加一个接受所有 4 个属性的构造函数,但使其可为DateTime空并默认为null. 如果它为 null,则让构造函数使用DateTime.Now。例如:

public record Contact
{
    public Contact(string name, string email, string phoneNo, DateTime? updatedAt = null)
    {
        this.Name = name;
        this.Email = email;
        this.PhoneNo = phoneNo;
        this.UpdatedAt = (updatedAt ?? DateTime.Now);
    }

    public string Name {get;set;}
    public string Email {get;set;}
    public string PhoneNo  {get;set;}
    public DateTime UpdatedAt {get;set;};
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为基本上你的解决方案是有效的,只是补充一下。要保持记录的不变性,请更改所有`{ get; 放; }` 为 `{ get; 在里面; }` (3认同)