public class IterationSample : IEnumerable
{
public object[] values;
public int startingPoint;
public IterationSample(object[] values, int startingPoint)
{
this.values = values;
this.startingPoint = startingPoint;
}
public IEnumerator GetEnumerator()
{
return new IterationSampleIterator(this);
}
}
public class IterationSampleIterator : IEnumerator
{
IterationSample parent;
int position;
internal IterationSampleIterator(IterationSample parent)
{
this.parent = parent;
position = -1;
}
public object Current
{
get
{
if (position == -1 || position == parent.values.Length)
{
throw new InvalidOperationException();
}
int index = position + parent.startingPoint;
index = index % parent.values.Length;
return parent.values[index];
}
}
public bool MoveNext()
{
if (position != parent.values.Length)
{
position++;
}
return position < parent.values.Length;
}
public void Reset()
{
position = -1;
}
}
调用:
var result = new StringBuilder();
object[] values={"a","b","c","d"};
IterationSample sample = new IterationSample(values, 2);
foreach (object x in sample)
{
result.Append(x.ToString());
}
result的值为 cdab