实现IEnumerable。错误。

时间:2011-07-29 14:21:15

标签: c# ienumerable

我的代码是:

using System;
using System.Threading;
using System.Collections;
using System.Collections.Generic;

namespace IEnumerable
{
    public class MyEnumerable<T> : IEnumerable<T>
    {
        public MyEnumerable(T[] items)
        {
            this.items = items;
        }

        public IEnumerator<T> GetEnumerator()
        {
            return new NestedEnumerator(this);
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        // The enumerator definition.
        class NestedEnumerator : IEnumerator<T>
        {
            public NestedEnumerator(MyEnumerable<T> coll)
            {
                Monitor.Enter(coll.items.SyncRoot);
                this.index = -1;
                this.coll = coll;
            }

            public T Current
            {
                get { return current; }
            }

            object IEnumerator.Current
            {
                get { return Current; }
            }

            public bool MoveNext()
            {
                if (++index >= coll.items.Length)
                {
                    return false;
                }
                else
                {
                    current = coll.items[index];
                    return true;
                }
            }

            public void Reset()
            {
                current = default(T);
                index = 0;
            }

            public void Dispose()
            {
                try
                {
                    current = default(T);
                    index = coll.items.Length;
                }
                finally
                {
                    Monitor.Exit(coll.items.SyncRoot);
                }
            }

            private MyEnumerable<T> coll;
            private T current;
            private int index;
        }

        private T[] items;
    }

    public class EntryPoint
    {
        static void Main()
        {
            MyEnumerable<int> integers = new MyEnumerable<int>(new int[] { 1, 2, 3, 4 });

            foreach (int n in integers)
            {
                Console.WriteLine(n);
            }
        }
    }
}

我正在实现这段代码但是我收到了一个错误。任何人都可以帮我解决错误免费使用此代码吗?请帮忙。 我的错误是:

1-&gt;'IEnumerable'是'命名空间',但用作“类型”

2-&gt;'IEnumerable.MyEnumerable'未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'。 'IEnumerable.MyEnumerable.GetEnumerator()'无法实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.IEnumerator'。

2 个答案:

答案 0 :(得分:7)

如果您的名称空间已经是系统中的类型,那么您可能会使用IEnumerable作为错误。

这意味着您对IEnumerable的引用引用了当前命名空间,而不是您要使用的IEnumerableSystem.Collections.IEnumerable)。

尝试将名称空间更改为其他内容。

答案 1 :(得分:3)

聆听编译器告诉您的内容并将您的名称空间更改为合理的内容(例如BlingBlingWoo

...
using System.Collections.Generic;

namespace BlingBlingWoo
{
    public class MyEnumerable<T> : IEnumerable<T>
    ...

这里发生的事情是:

  

错误:'IEnumerable'是'命名空间',但用作'type'

您正在尝试使用类型IEnumerable,但您已创建名为IEnumerable的命名空间,因此编译器就是命名空间。