堆栈溢出
问题描述:
我有这个寄存器,寄存器中的所有对象,我需要:堆栈溢出
public static class ObjectRegister
{
public static List<IObject> RegisteredObjects = new List<IObject>();
static ObjectRegister()
{
RegisteredObjects.Add(new Object1());
RegisteredObjects.Add(new Object2());
RegisteredObjects.Add(new Object3());
}
}
接下来,我有这个功能,它检查一个列表,如果该列表中的项目通过测试,它创建了一个对象实例,并将其添加到列表:
public static List<IObject> Scan(List<parametar> list)
{
List<IObject> neededObjects = new List<IObject>();
foreach (IObject registeredObject in ObjectRegister.RegisteredObjects)
{
foreach (parametar param in list)
{
if (registeredObject.Test(param)) //returns true or false
{
neededObjects.Add(registeredObject.CreateInstance(param));
}
}
}
return connectedObjects;
}
这里是Object1的CreateInstace方法:
public IObject CreateInstance(parametar param)
{
return new Object1(param);
}
这里是构造函数:
public Object1(parametar newParam)
{
this.param = newParam;
}
该公司密切关注该行trowing *的例外:
this.param = newParam;
尝试了所有的可能性,创建一个实例,默认的构造函数,空对象等等等等,但是毫无效果... 有任何想法吗?
感谢名单
编辑: 代码发送到Object1类:
public class Object1: IObject
{
public parametar param
{
get { return this.param; }
set { this.param = value; }
}
internal Object1() { }
public Object1(parametar newParam)
{
this.param = newParam;
}
public bool test(parametar param)
{
// I do the propper checking of the param here, and return the result
}
public IObject CreateInstance(parametar param)
{
return new Object1(param);
}
}
答
这是你的问题,在Object1:
public parametar param { get { return this.param; } set { this.param = value; }
该属性递归调用自己 - 这也正是为什么你会遇到堆栈溢出。不要这样做。相反,你可能要么想要一个自动实现的属性:
public parameter param { get; set; }
或使用专用支持字段:
private parametar param;
public parametar Param { get { return param; } set { param = value; }
此外,我强烈建议你开始按照.NET naming conventions,并支付注意类型和成员名称中的拼写。
所以你可能希望你的班级被称为Parameter
- 尽管我个人至少尝试使它更具描述性,例如, QueryParameter
或类似的东西。同样Object1
不完全是一个语义上有意义的名字 - 我希望它不是您的真实代码中的名称。
+0
谢谢:)那是问题 – GregoryHouseMD 2011-12-25 17:48:58
您需要显示Object1类的代码。 – 2011-12-25 17:35:48
看看调用堆栈。 – SLaks 2011-12-25 17:36:00
你真的有一个叫'parametar'的班吗? – 2011-12-25 17:39:35