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

How to write GetEnumerator() for a generic class?

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

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;
            }
}
  • 实施IEnumerable<T>强制用于foreach,但这是最佳实践,因此您可以将结构转换为IEnumerable<T> 并获得扩展方法支持:

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

    public IEnumerator<T> GetEnumerator()
    {
        var count = Count;
        for (var i = 0; i < count; ++i)
            yield return this[i];
    }