は、このコードを見てみると:いつIEnumerable.GetEnumeratorがIEnumerableの代わりに呼び出されるのですか。<T> .GetEnumerator?
public class myWords : IEnumerable<string>
{
string[] f = "I love you".Split(new string[]{"lo"},StringSplitOptions.RemoveEmptyEntries);
public IEnumerator<string> GetEnumerator()
{
return f.Select(s => s + "2").GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return f.Select(s => s + "3").GetEnumerator();
}
}
実行:
myWords m = new myWords();
foreach (var s in m)
{
Console.WriteLine(s);
}
利回り
I 2
ve you2 // notice "2", so the generic Ienumerator has executed.
私は非ジェネリックIEnumerator
バージョンは互換性のためであることを理解しています。
質問:非ジェネリック呼び出されます
- どんなシナリオでは?
- どうすればいいですか私のコードは非汎用の
IEnumerator
で実行されますか?コードは、非ジェネリックインターフェイスにクラスを唱えるたび
'Enumerable.Cast' – CodesInChaos