看看这段代码:
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运行?发布于 2013-02-16 10:47:04
IEnumerable的非泛型版本是通过显式接口实现实现的。这意味着您只能通过转换到接口来调用显式实现的函数。
之所以显式实现IEnumerable,是因为除了返回类型之外,方法签名是相同的。
将myWords显式转换为IEnumerable允许您调用非通用版本,如:(IEnumerable)myWords。
C#指南解释了这是如何工作的:显式接口实现。
https://stackoverflow.com/questions/14909326
复制相似问题