我的程序中有一个泛型类。然后我想在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;
}
}
答案 0 :(得分:1)
实施IEnumerable<T>
,在<{1}}中使用强制性,但这是最佳做法,因此您可以将结构转换为foreach
并获得扩展方法支持:
IEnumerable<T>
然后,您可以使用public class ReadStruct<T> : IEnumerable<T>
where T : struct
实施GetEnumerator
并重复使用您的索引器:
yield return