在foreach循环中创建对象

时间:2011-07-28 15:55:08

标签: c#

我有一些代码在foreach循环中创建对象。所以:

private IEnumerable<StrongTypeResult> ConvertResults(List<Object> results)
    {
     return results.Select(result => new StrongTypeResult(result)).ToList();       
    }

仅供参考,StrongTypeResult是一个结构。由于每个new StrongTypeResult(result)对象都在堆栈上分配,如果要创建大量对象,我是否会遇到堆栈溢出问题?让StrongTypeResult成为一个班级会更好吗?

3 个答案:

答案 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)

是的,如果你使用课程会更好。移动大量数据毫无意义。