如何生成一个嵌套的IENumerable

本文关键字:一个 嵌套 IENumerable 何生成 | 更新日期: 2023-09-27 18:06:42

我知道如何在具有返回值IENumerable的方法中产生值

public IEnumerable<int> GetDigits()
{
    yield return 1;
    yield return 1;
    yield return 1;
}

但是嵌套IEnumerable<IEnumerable<int>>的正确语法是什么?

public IEnumerable<IEnumerable<int>> GetNestedDigits()
{
    yield return yield return 1; //??
}

如何生成一个嵌套的IENumerable

不能直接嵌套yield return语句。您必须创建另一个方法:

public IEnumerable<IEnumerable<int>> GetNestedDigits()
{
    yield return GetNestedEnumerable();
}
public IEnumerable<int> GetNestedEnumerable()
{
    yield return 1;
}

像这样

public IEnumerable<IEnumerable<int>> GetNestedDigits()
{
    yield return new List<int>
    {
        1
    };
}

如果我从字面上理解你可以使用:

IEnumerable<IEnumerable<int>> GetNestedDigits()//{1, 2, 3}, {1, 2, 3}, {1, 2, 3}
{
  yield return new int[] { 1, 2, 3 };
  yield return new int[] { 1, 2, 3 };
}

你必须声明某种集合来实现IEnumerable并返回它。你不能直接计算收益率。也许更接近的方法是声明私有IEnumerables,然后返回。

IEnumerable<int> GetNestedDigitsA()
{
  yield return 1;
  yield return 2;
  yield return 3;
}
IEnumerable<int> GetNestedDigitsB()
{
  yield return 1;
  yield return 2;
  yield return 3;
}
IEnumerable<IEnumerable<int>> GetNestedDigits()//{1, 2, 3}, {1, 2, 3}
{
  yield return GetNestedDigitsA();
  yield return GetNestedDigitsB();
}