通过LINQ从索引迭代返回的产量

USS*_*ana 2 c# linq

留下LINQ使用的性能成本,我想知道如何将以下代码转换为LINQ表达式

for (int i = 0; i < someArray.length(); i++)
  yield return new SomeEntity(someFunction(i));
Run Code Online (Sandbox Code Playgroud)

重要提示:我需要使用递增的索引


更新:

而不是someArray.length(),number应使用:

for (int i = 0; i < number; i++)
  yield return new SomeEntity(someFunction(i));
Run Code Online (Sandbox Code Playgroud)

第二次更新

我仍然收到编译错误"并非所有代码路径返回值"

我的代码:

public static IEnumerable function()
{
    Enumerable.Range(0,5).Select(i => new Entity());
}
Run Code Online (Sandbox Code Playgroud)

第3次更新


直到我发现它是导致此错误的原因才认为它是相关的..

public static IEnumerable function()
{
    int[] arr = { 1, 2, 3, 4 };
    foreach (int i in arr)
    {
        Enumerable.Range(0,5).Select(i => new Entity());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你从方程式中取出foreach第一个循环,所有回复都回答了这个问题,但是我的问题是n ^ 2 .. 2个嵌套循环......

有任何想法吗?

Yuv*_*kov 6

使用Enumerable.Select具有索引的重载:

someArray.Select((x, i) => new SomeEntity(someFunction(i)));
Run Code Online (Sandbox Code Playgroud)

编辑

当您修改了示例并且实际上并未使用集合进行迭代和索引时,请使用Enumerable.Range:

Enumerable.Range(0, number).Select(i => new SomeEntity(someFunction(i)));
Run Code Online (Sandbox Code Playgroud)