实现IEnumerable.错误

本文关键字:错误 IEnumerable 实现 | 更新日期: 2023-09-27 18:03:51

我的代码是:

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->'IEnumerable'是一个'命名空间',但像'type'一样使用

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

实现IEnumerable.错误

这个错误很可能是您使用IEnumerable作为您的名称空间,而它已经是系统中的类型。

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

倾听编译器告诉你的并将名称空间更改为合理的名称空间(如BlingBlingWoo)

...
using System.Collections.Generic;
namespace BlingBlingWoo
{
    public class MyEnumerable<T> : IEnumerable<T>
    ...

这里发生的事情是:

错误:'IEnumerable'是一个'namespace',但被当作'type'使用

您正在尝试使用类型IEnumerable,但您已经创建了一个名为IEnumerable的命名空间,因此编译器将其命名为名称空间。