我的代码是:
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'。
答案 0 :(得分:7)
如果您的名称空间已经是系统中的类型,那么您可能会使用IEnumerable
作为错误。
这意味着您对IEnumerable
的引用引用了当前命名空间,而不是您要使用的IEnumerable
(System.Collections.IEnumerable
)。
尝试将名称空间更改为其他内容。
答案 1 :(得分:3)
聆听编译器告诉您的内容并将您的名称空间更改为合理的内容(例如BlingBlingWoo
)
...
using System.Collections.Generic;
namespace BlingBlingWoo
{
public class MyEnumerable<T> : IEnumerable<T>
...
这里发生的事情是:
错误:'IEnumerable'是'命名空间',但用作'type'
您正在尝试使用类型IEnumerable
,但您已创建名为IEnumerable
的命名空间,因此编译器就是命名空间。