如何在C#中设置元组属性?赋值时触发栈溢出错误
修复元组属性栈溢出问题
你写的这段代码触发栈溢出的核心原因是属性的getter和setter直接递归调用自身:
- getter里
=> BoundsTuple会反复调用自身的get方法,形成无限循环 - setter里
BoundsTuple = value会反复调用自身的set方法,触发无限递归
解决这个问题的关键是给属性配置实际存储数据的幕后字段,具体有两种实现方式:
方案1:手动定义私有存储字段
// 私有字段用于实际存储元组数据 private (float minX, float maxX, float minY, float maxY) _boundsTuple; public (float minX, float maxX, float minY, float maxY) BoundsTuple { private get => _boundsTuple; set => _boundsTuple = value; }
这里用下划线开头的私有字段_boundsTuple存储实际数据,属性的get和set都操作这个字段,彻底避免了递归调用。
方案2:使用自动属性(更简洁)
如果不需要在get/set中添加自定义逻辑,直接用自动属性即可,编译器会自动帮你生成幕后存储字段:
public (float minX, float maxX, float minY, float maxY) BoundsTuple { private get; set; }
这种写法和方案1功能完全一致,但代码更简洁直观。
内容的提问来源于stack exchange,提问作者maxkcy
相关产品推荐
相关产品推荐

