C# 延迟加载堆栈溢出异常

C# 延迟加载堆栈溢出异常,c#,lazy-loading,C#,Lazy Loading,我不熟悉延迟加载,我一直在尝试在我的程序中实现它。然而,出于某种原因,我的程序抛出了一个StackoverflowException。我不知道如何处理这个问题 public new Field this[int key] { get { if (!this.Contains(key)) { Field field = null; // The

我不熟悉延迟加载,我一直在尝试在我的程序中实现它。然而,出于某种原因,我的程序抛出了一个StackoverflowException。我不知道如何处理这个问题

public new Field this[int key]
    {
        get
        {
            if (!this.Contains(key))
            {
                Field field = null;

                // The loading code of the field + assigning the field object.

                this.Add(field);
            }

            return this[key];
        }
    }
我知道最后一行
这个[key]
会一次又一次地返回,但我不知道如何修复它


我的类是
的关键集合

此行再次调用getter,这将导致递归调用。由于没有停止条件,它会填满堆栈的内存,因此出现异常:

return this[key];
试着做一些类似的事情:

return this.GetItem(key);

此行再次调用getter,这将导致递归调用。由于没有停止条件,它会填满堆栈的内存,因此出现异常:

return this[key];
试着做一些类似的事情:

return this.GetItem(key);

KeyedCollection
已保护
Dictionary
属性。它返回所有项目的
IDictionary

public new Field this[int key]
{
    get
    {
        if (!this.Contains(key))
        {
            Field field = null;

            // The loading code of the field + assigning the field object.

            this.Add(field);
        }

        return Dictionary[key];
    }
}

KeyedCollection
已保护
Dictionary
属性。它返回所有项目的
IDictionary

public new Field this[int key]
{
    get
    {
        if (!this.Contains(key))
        {
            Field field = null;

            // The loading code of the field + assigning the field object.

            this.Add(field);
        }

        return Dictionary[key];
    }
}

发布其余的代码。@iamkrillin其余的代码只是查询数据库并获取字段对象的信息,以及一个返回字段对象键的方法。请继续发布。该错误可能在该代码块中;然后该[int key]方法将被反复调用-->stackoverflow exception。您应该返回一个Field对象。@iamkrillin我已调试,加载代码不是问题所在。实际上很好。问题在于
返回这个[key]
,它只会一遍又一遍地检查代码块。请发布其余的代码。@iamkrillin其余的代码只是查询数据库并获取字段对象的信息,以及一个返回字段对象的键的方法。还是发布吧。该错误可能在该代码块中;然后该[int key]方法将被反复调用-->stackoverflow exception。您应该返回一个Field对象。@iamkrillin我已调试,加载代码不是问题所在。实际上很好。问题在于
返回这个[key]
,它只会一遍又一遍地遍历代码块。@Cory我仍然必须通过overriden键来获取它,而不是通过索引,这样对我没有帮助。@Cory我仍然必须通过overriden键来获取它,而不是通过索引,这样对我没有帮助。