小编Bar*_*icz的帖子

获取 IEnumerable 的第一项,并将其余项作为 IEnumerable 返回,仅迭代一次

我有一个枚举,其中包含逐渐传入的服务调用的响应。

  • 我无法ToList对可枚举进行操作,因为这会阻塞,直到收到所有响应,而不是在收到响应时列出它们。
  • 我也无法迭代两次,因为这会触发另一个服务调用。

如何获取可枚举的第一个元素并返回可枚举的延续?我无法使用迭代器方法,因为出现编译错误:

迭代器不能有 ref、in 或 out 参数。

我试过这段代码:

public IEnumerable<object> GetFirstAndRemainder(IEnumerable<object> enumerable, out object first)
{
      first = enumerable.Take(1).FirstOrDefault();
      return enumerable.Skip(1);  // Second interation - unexceptable
}


// This one has a compilation error: Iterators cannot have ref, in or out parameters
public IEnumerable<object> GetFirstAndRemainder2(IEnumerable<object> enumerable, out object first)
{
    var enumerator = enumerable.GetEnumerator();
    enumerator.MoveNext();
    first = enumerator.Current;
    while (enumerator.MoveNext())
    {
        yield return enumerator.Current;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# ienumerable enumerate enumerator

4
推荐指数
1
解决办法
1218
查看次数

标签 统计

c# ×1

enumerate ×1

enumerator ×1

ienumerable ×1