質問
私はどのように使用するかを思い出すのに苦労しています IEnumerator
s in c#。私は、初心者にすべてを非常にうまく説明する素晴らしいドキュメントでJavaに慣れています。だから、私と一緒に我慢してください。
これらのボードの他の回答から学習しようとしました。すでに以前に尋ねられた一般的な質問をするのではなく、私のために物事を明確にする特定の例があります。
渡す必要がある方法があるとします IEnumerable<String>
物体。必要な方法は、文字を連結することです roxxors
すべての終わりまで String
イテレーターで。その後、この新しいイテレーターを返します(もちろんオリジナル IEnumerable
オブジェクトはそのまま残されます)。
どうやってこれを進めますか?ここでの答えは、もちろん、私に加えて、これらのオブジェクトに関する基本的な質問で多くの人に役立つはずです。
解決
これがドキュメントです IEnumerator
. 。それらはリストの値を取得するために使用されます。ここでは、長さは必ずしも事前に知られていません(そうであっても)。言葉はから来ます enumerate
, 、「カウントオフまたは1つずつ名前を付ける」ことを意味します。
IEnumerator
と IEnumerator<T>
すべてが提供しています IEnumerable
と IEnumerable<T>
インターフェイス(後者は両方を提供する)を.net via 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();
}
他のヒント
public IEnumerable<string> Appender(IEnumerable<string> strings)
{
List<string> myList = new List<string>();
foreach(string str in strings)
{
myList.Add(str + "roxxors");
}
return myList;
}
また
public IEnumerable<string> Appender(IEnumerable<string> strings)
{
foreach(string str in strings)
{
yield return str + "roxxors";
}
}
を使用して 収量構造, 、または単に
var newCollection = strings.Select(str => str + "roxxors"); //(*)
また
var newCollection = from str in strings select str + "roxxors"; //(**)
後者が使用する場合 linq と (**)
単なる構文砂糖です (*)
.
私があなたを正しく理解していれば、c#で yield return
コンパイラマジックはあなたが必要とするすべてです。
例えば
IEnumerable<string> myMethod(IEnumerable<string> sequence)
{
foreach(string item in sequence)
{
yield return item + "roxxors";
}
}
私は次のようなことをします:
private IEnumerable<string> DoWork(IEnumerable<string> data)
{
List<string> newData = new List<string>();
foreach(string item in data)
{
newData.Add(item + "roxxors");
}
return newData;
}
シンプルなもの:)
また、LINQの選択方法を使用できます。
var source = new[] { "Line 1", "Line 2" };
var result = source.Select(s => s + " roxxors");
詳細はこちらをご覧ください Enumerable.Selectメソッド