diff options
author | Jon Skeet <skeet@pobox.com> | 2015-07-16 09:34:04 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2015-07-16 09:34:04 +0100 |
commit | 7ea5239792c3c449e7ae36caa3a9de04b90d0bbe (patch) | |
tree | f1f80ed866d477d9b22d13898ec78dc8a21d5269 | |
parent | 3bf74a91bb936c71bfbe61db5c87d10eaac1bc41 (diff) | |
parent | 78b452b7acf985747d3d2813dedea3d267b08bae (diff) | |
download | protobuf-7ea5239792c3c449e7ae36caa3a9de04b90d0bbe.tar.gz protobuf-7ea5239792c3c449e7ae36caa3a9de04b90d0bbe.tar.bz2 protobuf-7ea5239792c3c449e7ae36caa3a9de04b90d0bbe.zip |
Merge pull request #610 from jskeet/fix-enumerator
Remove the struct-based iterator for RepeatedField.
-rw-r--r-- | csharp/src/ProtocolBuffers.Test/Collections/RepeatedFieldTest.cs | 6 | ||||
-rw-r--r-- | csharp/src/ProtocolBuffers/Collections/RepeatedField.cs | 63 |
2 files changed, 6 insertions, 63 deletions
diff --git a/csharp/src/ProtocolBuffers.Test/Collections/RepeatedFieldTest.cs b/csharp/src/ProtocolBuffers.Test/Collections/RepeatedFieldTest.cs index 6eff8683..25be7731 100644 --- a/csharp/src/ProtocolBuffers.Test/Collections/RepeatedFieldTest.cs +++ b/csharp/src/ProtocolBuffers.Test/Collections/RepeatedFieldTest.cs @@ -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); } } diff --git a/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs b/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs index a09c7954..8375ae0b 100644 --- a/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs +++ b/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs @@ -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 } } |