C# 延迟加载堆栈溢出异常
我不熟悉延迟加载,我一直在尝试在我的程序中实现它。然而,出于某种原因,我的程序抛出了一个StackoverflowException。我不知道如何处理这个问题C# 延迟加载堆栈溢出异常,c#,lazy-loading,C#,Lazy Loading,我不熟悉延迟加载,我一直在尝试在我的程序中实现它。然而,出于某种原因,我的程序抛出了一个StackoverflowException。我不知道如何处理这个问题 public new Field this[int key] { get { if (!this.Contains(key)) { Field field = null; // The
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键来获取它,而不是通过索引,这样对我没有帮助。