在下面的类中,我成功实现了 IEnumerable(T) 以遍历 T。在同一个类中,我能够实现 IEnumerable(DLLItem(T)) 以遍历 DLLItem(T)。两者都在独立工作。这可能是一个基本问题。我应该怎么做才能让两个迭代器在同一个类中一起工作?我已经尝试了几种可能性,总是会出现编译器错误......
使用 IEnumerable(T)
public class DLL<T> : IEnumerable<T>
{
...
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator()
{
...
yield return ...
...
}
...
}
使用 IEnumerable(DLLItem(T))
public class DLL<T> : IEnumerable<DLLItem<T>>
{
...
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<DLLItem<T>> GetEnumerator()
{
...
yield return ...
...
}
...
}
在此先感谢您的支持...
@dasblinkenlight 建议的解决方案(见下文)
public class DLLItemEnum<T> : IEnumerable<DLLItem<T>>
{
DLL<T> dll;
public DLLItemEnum(DLL<T> d)
{
dll = d;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<DLLItem<T>> GetEnumerator()
{
...
yield return ...
...
}
public static explicit operator DLLItemEnum<T>(DLL<T> d)
{
DLLItemEnum<T> i = new DLLItemEnum<T>(d);
return i;
}
}
public class ItemEnum<T> : IEnumerable<T>
{
DLL<T> dll;
public ItemEnum(DLL<T> d)
{
dll = d;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator()
{
...
yield return ...
...
}
public static explicit operator ItemEnum<T>(DLL<T> d)
{
ItemEnum<T> i = new ItemEnum<T>(d);
return i;
}
public class DLL<T>
{
...
}
class Test
{
static void Main(string[] args)
{
...
foreach (int i in (ItemEnum<int>)z)
Console.WriteLine(i);
foreach (DLLItem<int> i in (DLLItemEnum<int>)z)
Console.WriteLine(i.Data);
...
}
}