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

如何避免C# record struct主构造函数生成带setter的属性?

让C# record struct属性仅保留getter的方法

要阻止编译器为record struct的自动生成属性添加setter,你可以用以下几种方式:

1. 显式声明只读属性

手动定义属性并指定只读访问器,再通过构造函数完成赋值:

public record struct MyStruct
{
    // 仅允许在构造或对象初始化器阶段赋值
    public bool MyValue { get; init; }

    public MyStruct(bool myValue) => MyValue = myValue;
}

如果需要完全不可变(编译阶段就限制任何后续修改),可以用readonly修饰属性:

public record struct MyStruct
{
    public readonly bool MyValue { get; }

    public MyStruct(bool myValue) => MyValue = myValue;
}

2. 主构造函数结合readonly修饰符

在C# 10及以上版本中,直接在主构造函数的参数前添加readonly关键字,编译器会自动生成仅带getter的只读属性,不会生成setter:

public record struct MyStruct(readonly bool MyValue);

为什么in修饰符没用?

in关键字仅控制构造函数参数的传递方式(按只读引用传递),不会改变生成属性的可变性,因此无法阻止setter的生成。

内容的提问来源于stack exchange,提问作者user3797758

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:20:58