首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候调用IEnumerable.GetEnumerator而不是IEnumerable<T>.GetEnumerator?

什么时候调用IEnumerable.GetEnumerator而不是IEnumerable<T>.GetEnumerator?
EN

Stack Overflow用户
提问于 2013-02-16 10:34:33
回答 3查看 2.5K关注 0票数 9

看看这段代码:

代码语言:javascript
复制
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();
    }
}

跑步:

代码语言:javascript
复制
 myWords m = new myWords();
 foreach (var s in m)
 {
     Console.WriteLine(s);
 }

产量

代码语言:javascript
复制
I 2
ve you2    // notice "2", so the generic Ienumerator has executed.

据我所知,非通用IEnumerator版本是为了兼容性.

问题:

  1. 在什么情况下将调用非泛型?
  2. 如何强制我的代码使用非泛型IEnumerator运行?
EN

Stack Overflow用户

发布于 2013-02-16 10:47:04

IEnumerable的非泛型版本是通过显式接口实现实现的。这意味着您只能通过转换到接口来调用显式实现的函数。

之所以显式实现IEnumerable,是因为除了返回类型之外,方法签名是相同的。

myWords显式转换为IEnumerable允许您调用非通用版本,如:(IEnumerable)myWords

C#指南解释了这是如何工作的:显式接口实现

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14909326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档