1. ホーム
  2. c#

IEnumeratorの簡単な使い方(例付き)

2023-07-30 10:56:12

質問

をどのように使うか(なぜ使うかは別として)思い出すのに苦労しています。 IEnumerator を C# で使用する方法 (理由ではなく) を思い出すのに苦労しています。 私は、初心者にすべてをうまく説明してくれる素晴らしいドキュメントを持つJavaに慣れています。ですから、どうか我慢してください。

私はこの掲示板の他の回答から学ぼうとしましたが、無駄でした。すでに前に質問された一般的な質問をするよりも、私は私のために物事を明確にするために具体的な例を持っています。

を渡される必要があるメソッドがあるとします。 IEnumerable<String> オブジェクトを渡す必要があるメソッドがあるとします。 このメソッドが行うべきことは、文字を連結して roxxors という文字を各 String をイテレータの最後に追加します。そして、この新しいイテレータを返します (もちろん、元の IEnumerable オブジェクトはそのまま残されます)。

どうすればいいのでしょうか? ここでの回答は、もちろん私以外にも、これらのオブジェクトに関する基本的な疑問を持つ多くの人の助けになるはずです。

どのように解決するのですか?

以下は IEnumerator . これらは、長さが必ずしも事前に分かっていないリストの値を取得するために使われます(分かっていても)。この言葉の由来は enumerate から来ており、「1つずつ数える、名前をつける」という意味です。

IEnumeratorIEnumerator<T> が提供するのは、すべての IEnumerableIEnumerable<T> インターフェース(後者はその両方を提供)を、.NETでは GetEnumerator() . これは重要なことで foreach 文はこれらのインターフェイスメソッドを通して直接列挙子を操作するように設計されているからです。

ですから、例えば

IEnumerator enumerator = enumerable.GetEnumerator();

while (enumerator.MoveNext())
{
    object item = enumerator.Current;
    // Perform logic on the item
}

になる。

foreach(object item in enumerable)
{
    // Perform logic on the item
}

あなたの特定のシナリオに関しては、.NETのほとんどすべてのコレクションが IEnumerable . そのため、次のようにすることができます。

public IEnumerator Enumerate(IEnumerable enumerable)
{
    // List implements IEnumerable, but could be any collection.
    List<string> list = new List<string>(); 

    foreach(string value in enumerable)
    {
        list.Add(value + "roxxors");
    }
    return list.GetEnumerator();
}