延迟加载Stackoverflow异常

时间:2014-06-01 15:14:43

标签: c# lazy-loading

我是懒人加载的新手,我一直试图在我的程序中实现它。但是,由于某种原因,我的程序抛出了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];
        }
    }

我确实认识到最后一行this[key]会一次又一次地返回,但我不确定如何修复它。

我的班级是<int, Field>的KeyedCollection。

2 个答案:

答案 0 :(得分:4)

KeyedCollection已保护Dictionary财产。它会返回IDictionary<TKey, TItem>所有项目。

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];
    }
}

答案 1 :(得分:2)

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

return this[key];

尝试做类似的事情:

return this.GetItem(key);