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

如何在C#的复制构造函数中使用with关键字实现自定义拷贝逻辑

结论

目前C#的语法规范不支持你尝试的这几种写法,你暂时只能沿用传统手动赋值的方式编写自定义复制构造函数。

原因说明

  1. 构造函数本身没有返回值,第一种return original with {...}的写法天然不符合构造函数的语法规则,不可能编译通过。
  2. C#中仅结构体的构造函数允许对this赋值,类和record的构造函数中this是只读引用,无法将正在构造的当前实例直接替换为with表达式生成的新实例,所以第二种写法也不成立。
  3. 第三种是你自行设想的语法,C#官方没有设计对应语法规则,编译器自然无法识别。

另外补充背后的设计逻辑:with表达式本质上会在底层调用你正在定义的复制构造函数,如果你在复制构造函数里又调用with表达式,会直接触发无限递归调用,哪怕语法允许,运行时也会直接栈溢出。

简化方案建议

如果不想每次都重复写所有字段的赋值,可以把公共的赋值逻辑抽成独立的私有辅助方法,不同的自定义构造函数都调用该方法,仅额外处理需要特殊拷贝逻辑的字段即可,能一定程度减少重复代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:36:07