C# 9.0 Record构造器中非可空属性如何设置默认值避免重复传参
方案1:位置式record + 自定义构造器重载
保留现有位置式record的定义,额外新增一个仅接收3个业务参数的构造器,内部自动填充UpdatedAt的值:
public record Contact(string Name, string Email, string PhoneNo, DateTime UpdatedAt) { // 自定义构造器,自动传入当前时间 public Contact(string Name, string Email, string PhoneNo) : this(Name, Email, PhoneNo, DateTime.Now) { } }
实例化时就可以省略UpdatedAt参数:
var contact = new Contact("My Name", "a@abc.com", "123456");
方案2:显式声明属性的非位置式record
这种写法和原类定义几乎完全一致,仅需把class关键字替换为record,适配成本最低:
public record Contact { public string Name { get; set; } public string Email { get; set; } public string PhoneNo { get; set; } public DateTime UpdatedAt { get; set; } = DateTime.Now; }
可以沿用原类的实例化方式,支持对象初始化器写法:
var contact = new Contact { Name = "My Name", Email = "a@abc.com", PhoneNo = "123456" };
如果需要符合record的不可变特性,仅需把属性的set访问符替换为init即可,初始化后属性无法被修改。
内容的提问来源于stack exchange,提问作者lrh09
相关产品推荐
相关产品推荐

