<分区>
此代码导致堆栈溢出异常,我不确定原因。
public double? Value
{
get
{
return Value.HasValue ? (double?)Math.Round(Value.Value, 1) : null;
}
set
{
Value = value;
}
}
标签 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/