Patrząc na ten kod:Kiedy IEnumerable.GetEnumerator zostanie wywołany zamiast 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();
}
}
Bieg:
myWords m = new myWords();
foreach (var s in m)
{
Console.WriteLine(s);
}
Plony
I 2
ve you2 // notice "2", so the generic Ienumerator has executed.
Rozumiem, że non-generic IEnumerator
wersja jest dla kompatybilności.
Pytanie:
- W jaki scenariusz będzie nierodzajową powoływać?
- Jak mogę wymusić mój kod do uruchomienia z nietypowym
IEnumerator
?
'Enumerable.Cast' – CodesInChaos