Sae*_*ani 0 c# stack-overflow properties
有人可以告诉我为什么我会得到StackOverflowException下面的代码?
private float _voltageRange
{
get { return _voltageRange + ((10F/100F)*_voltageRange); }
set { _voltageRange = value; }
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?是不是编译器会自动生成支持字段?
我想要实现的目标是回归_VoltageRange10%.
Jon*_*eet 11
你的getter和你的setter都会递归地调用它们.
不,编译器不会自动为您创建支持字段 - 除非您使用这样的自动实现的属性:
public float VoltageRange { get; set; }
Run Code Online (Sandbox Code Playgroud)
每当您提供的getter/setter机构,你必须做所有自己.
这听起来像你想要的:
private float _voltageRange;
private float VoltageRange
{
get { return _voltageRange + ((10F/100F)*_voltageRange); }
set { _voltageRange = value; }
}
Run Code Online (Sandbox Code Playgroud)
或者更简单:
private float _voltageRange;
private float VoltageRange
{
get { return (_voltageRange * 11) / 10; }
set { _voltageRange = value; }
}
Run Code Online (Sandbox Code Playgroud)
(或者只乘以1.1f,但数据丢失的可能性会更大.)
请注意,这是一个非常奇怪的属性 - 其中值集与检索的值不同.通常这个:
VoltageRange = VoltageRange;
Run Code Online (Sandbox Code Playgroud)
将是一个无操作.这是大多数读者所期望的.
拥有两个属性可能会更好,如下所示:
private VoltageRange { get; set; }
private EffectiveVoltageRange { get { return VoltageRange * 1.1f; } }
Run Code Online (Sandbox Code Playgroud)