You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:36:03