解决方案 »

  1.   

    要继承某接口
    看这里 看这里
    http://blog.csdn.net/byondocean/article/details/6871881
      

  2.   

    官方的例子
    https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.aspx
      

  3.   

    有拼写错误: public IEnumerable GetEnunmerator()
    改成:
    public IEnumerator GetEnumerator()
      

  4.   

    两种改法:
    1. Prims 类实现IEnumerable接口,调用方不变
    public class Prims 改为:public class Prims : IEnumerable
    public IEnumerable GetEnunmerator() 改为:public IEnumerator GetEnumerator()2. Prims 类不实现IEnumerable接口,调用方调用GetEnumerator
    public IEnumerable GetEnunmerator() 改为:public IEnumerable GetEnumerator() (只是改了拼写错误)
    foreach (long i in primesFrom2To1000) 改为:foreach (long i in primesFrom2To1000.GetEnumerator())
      

  5.   

    很明显的拼写错误,拿你报错信息去搜,根本都没搜到代码里出现过GetEnumerator
      

  6.   


    严格的说,IEnumerable接口并不是必要的:这可能是Dotnet2以前,没有泛型支持下,为减少装箱拆箱的一种编译器优化。很有趣的,同时我比较难理解的是,Dotnet4.5的async模式还在支持编译器Duck Typing,比如一个类只要有可用的GetAwaiter函数,它就是awaitable(要代码测试的朋友注意async需要Dotnet 4.5):
    class My
    {
        public System.Runtime.CompilerServices.TaskAwaiter GetAwaiter()
        {
            return Task.Delay(1000).GetAwaiter();
        }
    }private async void button1_Click(object sender, EventArgs e)
    {
        await new My();  // 注意My不用实现任何接口
    }
      

  7.   


    找到了Eric Lippert 关于这个问题的解释:http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx ,看起来现在c#里面有3种这样的"pattern-based approach"
      

  8.   

    迭代器显示公交车站点示例
    //迭代器的返回类型必须是IEnumerable或IEnumerator中的任意一种
    //定义一个泛型对象,用于存储
      public static IList<object> items = new List<object>();
            // 通过迭代器获取泛型中的所有对象值
            // <param Node="n">泛型对象</param>
            public static IEnumerable<object> GetValues()
            {
                if (items != null)//如果泛型不为空
                {
                    foreach (object i in items)//遍历泛型中的对象
                        yield return i;
                }
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                //向泛型集合中添加站点数据
                items.Add("长春路");
                items.Add("百合路");
                items.Add("河南街");
                items.Add("东市场");
                items.Add("上海路");
                items.Add("制药厂");
                items.Add("胶合板厂");
                items.Add("红旗路路");
                items.Add("开源路");
                items.Add("东盛路");
                items.Add("安乐路");
                items.Add("岭东路");
                items.Add("公平路");
                items.Add(108);
                items.Add(true);
            }        private void button1_Click(object sender, EventArgs e)
            {
                foreach (object i in GetValues())//遍历泛型集合
                    listView1.Items.Add(i.ToString());//在列表视图中显示公交车站点
            }