C#中的堆栈溢出

Gre*_*eMD 0 .net c#

我有这个寄存器,可以记录我需要的所有对象:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来我有这个检查列表的函数,如果列表中的项目通过测试,它会创建一个对象实例并将其添加到列表中:

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;
    }
Run Code Online (Sandbox Code Playgroud)

这是Object1的CreateInstace方法:

public IObject CreateInstance(parametar param)
    {
        return new Object1(param);
    }
Run Code Online (Sandbox Code Playgroud)

这是构造函数:

public Object1(parametar newParam)
    {
        this.param = newParam;
    }
Run Code Online (Sandbox Code Playgroud)

它不断在这一行上投入StackOverflow异常:

this.param = newParam;
Run Code Online (Sandbox Code Playgroud)

尝试了创建实例,默认构造函数,空对象等所有可能性,但没有任何工作...任何想法?

感谢名单

编辑: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);
    }
} 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

这是你的问题,在Object1中:

public parametar param { get { return this.param; } set { this.param = value; }
Run Code Online (Sandbox Code Playgroud)

该属性以递归方式调用自身 - 这正是您获得堆栈溢出的原因.不要那样做.相反,你可能要么需要一个自动实现的属性:

public parameter param { get; set; }
Run Code Online (Sandbox Code Playgroud)

或使用私人支持领域:

private parametar param;
public parametar Param { get { return param; } set { param = value; }
Run Code Online (Sandbox Code Playgroud)

此外,我强烈建议您开始遵循.NET命名约定,并注意类型和成员名称的拼写.

所以你可能希望你的课程被调用Parameter- 虽然我个人至少试图让它更具描述性,例如QueryParameter或类似的东西.同样Object1不是一个语义上有意义的名字 - 我希望它不是你真实代码中的名字.