C# 记录类型中的意外不一致性:with 运算符与派生数据的陷阱
2025-07-22

作者在使用C#记录类型时发现了一个意外的不一致性。当使用`with`运算符更新包含派生数据的记录时,派生数据不会被重新计算,导致数据不一致。这源于`with`运算符并非调用构造函数,而是使用复制构造函数创建副本并修改属性。作者提出了几种解决方案,包括避免在复杂记录中使用`with`运算符、编写Roslyn分析器来检测问题、使用`Lazy`延迟计算属性以及请求语言变更。这篇文章揭示了C#记录类型中一个潜在的陷阱,提醒开发者在使用`with`运算符时需谨慎,尤其是在处理包含派生数据的记录时。