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

Visual Studio为何建议将结构体属性的getter设为readonly?

为什么Visual Studio建议给结构体属性的getter添加readonly修饰符?

核心原因:值类型的特性差异

结构体是值类型,在未标记readonly的成员方法(包括普通getter)中访问结构体实例时,C#会默认创建实例的副本来操作。标记readonly的getter会被视为只读成员,直接操作原始实例,避免不必要的拷贝。

具体优势:

  • 性能优化:避免值类型实例拷贝带来的额外开销,尤其是结构体包含较大字段时,拷贝成本会更明显。
  • 语义更准确:getter本身仅用于读取数据,不会修改结构体状态,标记readonly能明确传达这个成员的只读意图,让代码语义更清晰。
  • 规范与兼容性:符合C# readonly成员的设计规范,在后续将结构体作为只读字段、或在readonly上下文中使用时,能避免潜在的编译错误。

代码层面的差异对比

原代码的getter未标记readonly:

public string SomeValue { get=>m_SomeValue; set=>m_SomeValue = value; }

调用someStructInstance.SomeValue时,因为getter未标记readonly,C#会创建someStructInstance的副本,再从副本中读取m_SomeValue。

修改后的代码:

public string SomeValue { readonly get=>m_SomeValue; set=>m_SomeValue = value; }

标记readonly后,getter直接操作原始实例,跳过了拷贝步骤,效率更高,同时明确了getter不会修改实例状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:21:57