看一下这段代码:
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
?
答案:
1. 当需要与旧代码或第三方库进行交互时,可能会调用非泛型版本。 2. 若要强制使用非泛型的
IEnumerator
,可以将返回类型设置为 IEnumerator
而不是 IEnumerator<T>
。
foreach
的例子:foreach (object word in (IEnumerable)myWords) …
- stakx - no longer contributing