Merge pull request #610 from jskeet/fix-enumerator
Remove the struct-based iterator for RepeatedField.
This commit is contained in:
commit
7ea5239792
@ -241,18 +241,12 @@ namespace Google.Protobuf.Collections
|
||||
var list = new RepeatedField<string> { "first", "second" };
|
||||
using (var enumerator = list.GetEnumerator())
|
||||
{
|
||||
Assert.Throws<InvalidOperationException>(() => enumerator.Current.GetHashCode());
|
||||
Assert.IsTrue(enumerator.MoveNext());
|
||||
Assert.AreEqual("first", enumerator.Current);
|
||||
Assert.IsTrue(enumerator.MoveNext());
|
||||
Assert.AreEqual("second", enumerator.Current);
|
||||
Assert.IsFalse(enumerator.MoveNext());
|
||||
Assert.Throws<InvalidOperationException>(() => enumerator.Current.GetHashCode());
|
||||
Assert.IsFalse(enumerator.MoveNext());
|
||||
enumerator.Reset();
|
||||
Assert.Throws<InvalidOperationException>(() => enumerator.Current.GetHashCode());
|
||||
Assert.IsTrue(enumerator.MoveNext());
|
||||
Assert.AreEqual("first", enumerator.Current);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -288,14 +288,12 @@ namespace Google.Protobuf.Collections
|
||||
}
|
||||
}
|
||||
|
||||
public RepeatedField<T>.Enumerator GetEnumerator()
|
||||
public IEnumerator<T> GetEnumerator()
|
||||
{
|
||||
return new Enumerator(this);
|
||||
}
|
||||
|
||||
IEnumerator<T> IEnumerable<T>.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
yield return array[i];
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
@ -467,55 +465,6 @@ namespace Google.Protobuf.Collections
|
||||
}
|
||||
Remove((T)value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public struct Enumerator : IEnumerator<T>
|
||||
{
|
||||
private int index;
|
||||
private readonly RepeatedField<T> field;
|
||||
|
||||
public Enumerator(RepeatedField<T> field)
|
||||
{
|
||||
this.field = field;
|
||||
this.index = -1;
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
if (index + 1 >= field.Count)
|
||||
{
|
||||
index = field.Count;
|
||||
return false;
|
||||
}
|
||||
index++;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
index = -1;
|
||||
}
|
||||
|
||||
public T Current
|
||||
{
|
||||
get
|
||||
{
|
||||
if (index == -1 || index >= field.count)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
return field.array[index];
|
||||
}
|
||||
}
|
||||
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get { return Current; }
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user