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

C# 类变量赋值前做自定义操作使用get set出现栈溢出如何解决

报错原因

你当前的写法会触发无限递归:DELIVERY_DATE是C#类属性,当你在get访问器中直接返回DELIVERY_DATE时,会再次触发该属性的get逻辑;在set访问器中给DELIVERY_DATE赋值时,也会再次触发该属性的set逻辑,整个调用没有终止条件,最终栈空间耗尽抛出栈溢出错误。

思路验证

你的实现方向完全正确,属性的get/set访问器本身就是为了封装字段读写的自定义逻辑设计的,非常适合做赋值校验、格式化、补位这类需求,只需要调整写法即可。

修正方案

你需要额外声明一个私有后台字段作为属性值的实际存储容器,访问器内部只操作这个后台字段,避免触发递归调用,示例代码如下:

// 私有后台字段,仅当前类内部可访问,用于实际存储值
private string _deliveryDate;

public string DELIVERY_DATE
{
    get 
    {
        // 取值时直接返回后台字段的值,不会触发递归
        return _deliveryDate;
    }
    set 
    {
        // 赋值时做自定义处理后写入后台字段
        _deliveryDate = checkDate(value, "yyyyMMdd");
    }
}

如果你需要在取值时也加自定义逻辑,也可以在get块里对_deliveryDate做处理后再返回。

补充说明:平时不需要自定义读写逻辑的属性可以直接用自动属性写法public string DELIVERY_DATE { get; set; },编译器会自动生成隐藏的后台字段,不需要手动声明;但只要需要自定义get或set的逻辑,就必须手动显式声明后台字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:03