此代码导致堆栈溢出异常,我不确定原因。
public double? Value
{
get
{
return Value.HasValue ? (double?)Math.Round(Value.Value, 1) : null;
}
set
{
Value = value;
}
}
答案 0 :(得分:2)
因为在你的Get
中你正在阅读该属性,导致无限循环。使用支持字段。
private double? _value;
public double? Value
{
get { return _value.HasValue ? (double?) Math.Round(_value.Value, 1) : null; }
set { _value = value; }
}
编辑:我还想指出,很容易证明这是非常糟糕的代码。首先,暴露公共制定者有点开始,它只比公共领域好一点。此外,使用代码可以很容易地将一个东西分配给变量,但是如果你在后面的行上检查它,则值已经改变了。我会考虑将舍入逻辑移入setter,删除可空性(如果适用),完全删除可变性(再次,如果适用)并在构造函数中注入值。
答案 1 :(得分:2)
因为在setter中你要为setter赋值,这意味着再次调用setter。 setter一直调用自己因此stackoverflow异常。吸气剂也一样。
您应该有一个实数变量来存储值:
public double? Value
{
get
{
return myValue.HasValue ? (double?)Math.Round(myValue.Value, 1) : null;
}
set
{
myValue = value;
}
}
private double? myValue;
答案 2 :(得分:0)
嗯,您的财产存在问题:
您必须使用支持字段,否则您将无法存储/获取您的价值。
您的代码变为:
countPaths()
你的例外将会消失。
您的堆栈溢出异常来自Math.Round(Value.Value,1)。
您正在尝试获取您的财产的价值。所以,你打电话给你的getter来获得这个价值。然后,再次点击 同一行,再次调用Math.Round(Value.Value,1)。
然后,再次调用吸气剂,然后...... 你明白了这一点。