实现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
(System.Collections.IEnumerable
)。
倾听编译器告诉你的并将名称空间更改为合理的名称空间(如BlingBlingWoo
)
...
using System.Collections.Generic;
namespace BlingBlingWoo
{
public class MyEnumerable<T> : IEnumerable<T>
...
这里发生的事情是:
错误:'IEnumerable'是一个'namespace',但被当作'type'使用
您正在尝试使用类型IEnumerable
,但您已经创建了一个名为IEnumerable
的命名空间,因此编译器将其命名为名称空间。