你好我对C#很陌生,所以我不能完全确定我想做的事情是可能的,
我基本上是想在List上设置get属性, 当此列表加载时,它将从另一个列表中读取信息,方法是:
如果父列表为空,请创建一个新列表 否则,遍历父列表元素并相应地处理每个元素
然而,get方法导致堆栈溢出,通过调试器运行它似乎只是反复运行,直到堆栈被烧断,即使它已经命中并处理了我的返回语句
以下是代码:
public ICollection<History> History
{
get {
if (HistoryKeyCount == 0)//HistoryKeyCount = Count of Parent List
{
History = new List<Histories>();
}
else
{
History = new List<Histories>();//Created again because after each read object is dropped from memory
foreach (HistoryKey x in ParentList)
{
if (x.Key == null)
{
// Do nothing
}
else
History.Add(ObjectFinder.FindObject<ParentList>(x.Key));
}
}
return History;
}
set {
//Not implemented yet
}
}
它进入get方法,到达if语句,创建新对象,返回它然后一遍又一遍地重复,直到发生stackoverflow异常。
问题不在于ObjectFinder类或创建新方法,当发生错误时甚至都达不到。
我原本以为是在if语句的每个实例之后创建了一个新对象,但是在添加了一个标志之后,只有在问题仍然存在时才会创建它。
以前有没有人遇到过这个问题?因为它让我难过!!
---- --- EDIT 我忘了提到我正在使用.NET的裸对象框架,这很可能是问题的根源
答案 0 :(得分:4)
您在历史记录中调用历史记录,因此它会递归。
History.Add(ObjectFinder.FindObject<ParentList>(x.Key));
将回调您的财产,并再次在同一行结束,然后再次自行调用....直到您用完了堆栈
也在最后,你再次回到历史......它无法逃脱:)
我觉得你要么想要一个局部变量,要么想要一个集合来返回,要么你想要一个私有字段来保存列表。无论哪种方式,都不要在历史记录中调用历史记录