我有一些代码在foreach循环中创建对象。所以:
private IEnumerable<StrongTypeResult> ConvertResults(List<Object> results)
{
return results.Select(result => new StrongTypeResult(result)).ToList();
}
仅供参考,StrongTypeResult是一个结构。由于每个new StrongTypeResult(result)
对象都在堆栈上分配,如果要创建大量对象,我是否会遇到堆栈溢出问题?让StrongTypeResult
成为一个班级会更好吗?
答案 0 :(得分:2)
首先,你不需要这里的foreach。选择已经返回所需类型的IEnumerable。您也不需要ToList。在客户端上预告IEnumerable时,将调用转换委托。
private IEnumerable<StrongTypeResult> ConvertResults(List<Object> results)
{
return results.Select(result => new StrongTypeResult(result));
}
将结构分配给变量时,会在堆栈上创建结构。如果将它们存储在列表或数组中,它们将在堆上。
请了解引用类型和值类型(例如结构)之间的差异。 通常,在分配给另一个变量时复制结构。
答案 1 :(得分:1)
如果你只想碰到StackOveFlowException
就足以创建不定式的递归调用
public void DeadLoop()
{
this.DeadLoop();
}
答案 2 :(得分:0)
是的,如果你使用课程会更好。移动大量数据毫无意义。