如何为泛型类编写GetEnumerator()?

时间:2015-06-28 14:08:57

标签: c# ienumerator

我的程序中有一个泛型类。然后我想在class<T>循环中使用foreach的实例,但它需要使用公共GetEnumerator。如何为GetEnumerator()撰写foreach

public class ReadStruct<T> where T : struct
{
            MemoryTributary _ms = null;
            public ReadStruct(MemoryTributary ms)
            {
                _ms = ms;
            }

            public T this[int Index]
            {
                get
                {
                    if (Index < Count)
                        return   _ms.Read<T>(Index);
                    return new T();
                }
            }

            public int CountByteToStruct { get { return Marshal.SizeOf(typeof(T)); } }
            public long Count { get { return _ms.Length / CountByteToStruct; } }
            // it doesn't work!!   
            public IEnumerator<T> GetEnumerator()
            {
                return (IEnumerator<T>)this;
            }
}

1 个答案:

答案 0 :(得分:1)

  • 实施IEnumerable<T>,在<{1}}中使用强制性,但这是最佳做法,因此您可以将结构转换为foreach并获得扩展方法支持:

    IEnumerable<T>
  • 然后,您可以使用public class ReadStruct<T> : IEnumerable<T> where T : struct 实施GetEnumerator并重复使用您的索引器:

    yield return