次のクラスでは、T を反復処理するために IEnumerable(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);
...
}
}