using System;
using System.Collections;
using System.Linq;
using System.Text;namespace TestIterator1
{
    public class Tokens : IEnumerable
    {
        private string elements;
        Tokens(string source,char delimiters )
        {
            elements = source.Split(delimiters);
        }
        public IEnumerator<char> GetEnumerator()
        {
            return new TokenEnumerator(this);
        }
        private class TokenEnumerator : IEnumerator
        {
            private int position = -1;
            private Tokens t;
            public TokenEnumerator(Tokens t)
            {
                this.t = t;
            }
            public bool MoveNext()
            {
                if (position < t.elements.Length - 1)
                {
                    position++;
                    return true;
                }
                else { return false; }
            }
            public void Reset()
            {
                position = -1;
            }
            public object Current
            {
                get { return t.elements; }
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Tokens f = new Tokens("This is a  well-done program!", new char { ' ', '-' });
            foreach (string item in f)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
}
运行后出显现错误:错误1 非泛型 类型“System.Collections.IEnumerator”不能与类型实参一起使用
这段代码我是照着书上编的,功能是隔一行显示一个字母。请问各位大侠,问题是不是红色部分代码没写好,要改怎么改啊?

解决方案 »

  1.   

    增加
    using System.Collections.Generic;
      

  2.   

    不行,增加或是改成using System.Collections.Generic;这个同样会报错:
    错误 1 使用泛型 类型“System.Collections.Generic.IEnumerable<T>”需要“1”个类型实参.
      

  3.   

    public IEnumerator<char> GetEnumerator()
      {
      return new TokenEnumerator(this);
      }
    红色去掉,非泛型的枚举器搞出一个泛型的实现方法,真乱
      

  4.   

     public class Tokens : IEnumerable<char>
     {
            private string[] elements;
            public Tokens(string source, char[] delimiters)
            {
                elements = source.Split(delimiters);
            }
            public IEnumerator<char> GetEnumerator()
            {
                return new TokenEnumerator(this);
            }
            private class TokenEnumerator : IEnumerator<char>        {
                private int position = -1;
                private Tokens t;
                public TokenEnumerator(Tokens t)
                {
                    this.t = t;
                }
                public bool MoveNext()
                {
                    if (position < t.elements.Length - 1)
                    {
                        position++;
                        return true;
                    }
                    else { return false; }
                }
                public void Reset()
                {
                    position = -1;
                }
                public object Current
                {
                    get { return t.elements; }
                }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Tokens f = new Tokens("This is a well-done program!", new[] { ' ', '-' });
                foreach (var item in f)
                {
                    Console.WriteLine(item);
                }
                Console.ReadKey();
            }
        }
      

  5.   


    还是不行,出现这样的错误:
    错误 1 非泛型 类型“System.Collections.IEnumerable”不能与类型实参一起使用 2 非泛型 类型“System.Collections.IEnumerator”不能与类型实参一起使用 3 非泛型 类型“System.Collections.IEnumerator”不能与类型实参一起使用
    这位大侠,能介绍一本好的适合C#入门的书不,谢谢啦。
      

  6.   

    三楼是对的,你这把非泛型的枚举器和泛型的枚举器搞混了  去掉<char>就成了,全部为非泛型的枚举器。