c# - 为什么在 C# 条件运算符时出现堆栈溢出异常?

标签 c#

<分区>

此代码导致堆栈溢出异常,我不确定原因。

public double? Value
    {
        get
        {
            return Value.HasValue ? (double?)Math.Round(Value.Value, 1) : null;
        }
        set
        {
            Value = value;
        }
    }

最佳答案

因为在您的 Get 中您正在读取属性,导致无限循环。使用支持字段。

private double? _value;
public double? Value
{
    get { return _value.HasValue ? (double?) Math.Round(_value.Value, 1) : null; }
    set { _value = value; }
}

编辑:我还想指出,很容易证明这是非常糟糕的代码。一方面,公开公共(public) setter 一开始有点不确定,它只比拥有公共(public)领域好一点点。此外,使用可以将一件事分配给变量的代码真的很困惑,但是如果你在之后的行中检查它,值已经改变了。我会考虑将舍入逻辑移动到 setter 中,移除可空性(如果适用),完全移除可变性(再次,如果适用)并将值注入(inject)构造函数。

关于c# - 为什么在 C# 条件运算符时出现堆栈溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34605482/

相关文章:

c# - 将函数绑定(bind)到 xaml 中的 MouseDown 事件?

c# - 更改无边框窗体的位置 (C#)

c# - 禁用父面板,同时保持子面板启用

c# - 模型中的 ASP.NET CORE DI

c# - ASP.NET MVC 下拉列表不会填充结果

c# - WPF - DragOver 事件没有在我的列表框上触发

c# - 从后台线程调用计时器

c# - 当用作委托(delegate)参数时,未实现的部分方法是否会被替换为 null?

c# - where 子句中的动态列名。 Entity Framework

javascript - PMT功能支付类型