Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在foreach循环中创建对象_C# - Fatal编程技术网

C# 在foreach循环中创建对象

C# 在foreach循环中创建对象,c#,C#,我有一些在foreach循环中创建对象的代码。因此: private IEnumerable<StrongTypeResult> ConvertResults(List<Object> results) { return results.Select(result => new StrongTypeResult(result)).ToList(); } private IEnumerable可转换结果(列出结果) { 返回结

我有一些在foreach循环中创建对象的代码。因此:

private IEnumerable<StrongTypeResult> ConvertResults(List<Object> results)
    {
     return results.Select(result => new StrongTypeResult(result)).ToList();       
    }
private IEnumerable可转换结果(列出结果)
{
返回结果。选择(result=>newstrongtyperesult(result)).ToList();
}

仅供参考,StrongTypeResult是一个结构。由于每个
新的StrongTypeResult(result)
对象都是在堆栈上分配的,如果要创建大量对象,我会遇到stackoverflow问题吗?将
StrongTypeResult
设为一个类是否更好?

如果只想运行
StackOveFlowException
,创建无限递归调用就足够了

public void DeadLoop()
{
   this.DeadLoop();
}

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

首先,这里不需要foreach。Select已返回所需类型的IEnumerable。你也不需要收费表。在客户端上预处理IEnumerable时,将调用转换委托

private IEnumerable<StrongTypeResult> ConvertResults(List<Object> results)
{
 return results.Select(result => new StrongTypeResult(result));
}
private IEnumerable可转换结果(列出结果)
{
返回结果。选择(结果=>新建StrongTypeResult(结果));
}
将结构指定给变量时,会在堆栈上创建结构。如果将它们存储在列表或数组中,它们将位于堆中

请了解引用类型和值类型(如结构)之间的差异。
通常,结构是在赋值给另一个变量时复制的。

我不相信你的代码做了你认为它做的事情。你的代码示例中是否缺少
yield
语句?编辑:事实上,我甚至不确定这里到底发生了什么。我同意@Chris的观点,你可能错过了收益率。至于你的另一个问题,这里似乎没有任何堆栈构造项,即使有,结构也在包装一个
对象
,它是对某个项的引用,我们不知道它是什么。基本上,我不会担心这里的堆栈溢出。我更担心的是,这段代码没有做到它应该做的。根据平台和优化,这可能会由于尾部递归优化而导致无限循环。