我收到类似
的错误“ciscontrols.dll中发生了'System.StackOverflowException'类型的未处理异常”。
我的代码如下:
private int _vin;
public int MaxLength
{
get { return _vin; }
set //Here your answer solve the promblem
{
txtLocl.MaxLength = value;
if (value < 2)
{
throw new ArgumentOutOfRangeException("MaxLength","MaxLength MinValue should be 2.");
}
else this._vin = value;
}
}
我正在为小数位创建一个新属性
private int Dval;
public int DecPlaces
{
get { return Dval; }
set// here it showing the same error
{
DecPlaces = value; // MaxLength is a preDefined Property but DecPlaces created by me.
if (value < 2)
{
throw new ArgumentOutOfRangeException("decplaces", "decimal places minimum value should be 2.");
}
else this.Dval = value;
}
}
答案 0 :(得分:2)
你的setter是递归的,因为你有
this.MaxLength = value;
在你的二传手中。这将导致无限循环,最终导致StackOverflowException
。
使用
this._vin = value;
相反
答案 1 :(得分:2)
你的财产的设定者在这一行上自称:
this.MaxLength = value;
将其更改为:
set //Here i am getting Error
{
txtLocl.MaxLength = value;
if (value < 2)
{
throw new ArgumentOutOfRangeException("MaxLength","MaxLength MinValue should be 2.");
}
else this._vin = value;
}
对于此特定异常,调试时在Visual Studio中显示的“调用堆栈”窗口有助于查看哪些方法在无限循环中相互调用。属性的setter最终成为运行时中名为set_MaxLength的方法。
答案 2 :(得分:1)
this.MaxLength = value
此行触发无限循环,因为它调用您已经在的set
访问器。您是否要设置支持变量的值?