每当我在C#中实例化此类时,我都会收到StackOverflow错误。 任何人都可以解释原因吗?
class Money
{
public Money(decimal value, Currency usedCurrency)
{
Value = value;
UsedCurrency = usedCurrency;
}
public decimal Value
{
get { return Value; }
set { Value = Math.Round(value, 2, MidpointRounding.ToEven); }
}
public Currency UsedCurrency;
}
public enum Currency
{
USD,
EUR,
GBP,
CAD,
AUD
}
这是一个实例化示例:
var money = new Money(100, Currency.USD);
答案 0 :(得分:14)
您的财产正在引用自己。当您尝试获取Value
时,它会引用Value
...它会再次尝试获取Value
......并且会一直打开。
public decimal Value
{
get { return Value; }
set { Value = Math.Round(value, 2, MidpointRounding.ToEven); }
}
使用支持字段。 (另外,我会将您的属性重命名为更有意义的内容,特别是因为value
具有特殊含义。)
private decimal roundedCurrency;
public decimal RoundedCurrency
{
get { return roundedCurrency; }
set { roundedCurrency = Math.Round(value, 2, MidpointRounding.ToEven); }
}
答案 1 :(得分:5)
您需要为您的媒体资源Value
提供支持字段。在当前代码中,属性的get/set
正在尝试设置属性,从而引入递归调用和Stackoverflow
异常。
private decimal _Value;
public decimal Value
{
get { return _Value; }
set { _Value = Math.Round(value, 2, MidpointRounding.ToEven); }
}