簡體   English   中英

C#。給定一個枚舉器,迭代直到結束以產生一個可枚舉的

[英]C#. Given an Enumerator, iterate till end to produce an enumerable

在 C# 中,我想編寫一個擴展方法,該方法采用Enumerator<T>並返回IEnumerable<T> 這可能證明是有用的,例如,如果我必須枚舉到列表中的某個點,然后想要一個包含當前元素(如果枚舉已經開始)加上剩余元素的列表。

這是我開始的一個簡單實現

  public static IEnumerable<T> Enumerate<T>(this IEnumerator<T> enumerator)
  {
      do
      {
          yield return enumerator.Current;
      }
      while (enumerator.MoveNext());
  }

我遇到的問題是,如果枚舉尚未開始,那么這會將默認值 T 添加到序列中(作為其第一個元素)。 有什么辦法可以解決這個問題/而不必傳入額外的 arguments。

您需要在yield語句之前.MoveNext()

public static IEnumerable<T> Enumerate<T>(this IEnumerator<T> enumerator)
{
    while (enumerator.MoveNext())
    {
        yield return enumerator.Current;
    };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM