aboutsummaryrefslogtreecommitdiff
path: root/csharp
diff options
context:
space:
mode:
authorJon Skeet <jonskeet@google.com>2015-08-10 08:47:07 +0100
committerJon Skeet <jonskeet@google.com>2015-08-10 08:47:07 +0100
commit5be01ee65b987ef17e6418fbff5f161ed0f5cc87 (patch)
tree63f29c339c4752a7bcde80d3286e54c44c39a3e0 /csharp
parent3f45d7c11e200184cfc09fb92efe25a63df1eef1 (diff)
downloadprotobuf-5be01ee65b987ef17e6418fbff5f161ed0f5cc87.tar.gz
protobuf-5be01ee65b987ef17e6418fbff5f161ed0f5cc87.tar.bz2
protobuf-5be01ee65b987ef17e6418fbff5f161ed0f5cc87.zip
Implement ICollection.CopyTo (using Array) for MapField views.
Diffstat (limited to 'csharp')
-rw-r--r--csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs14
-rw-r--r--csharp/src/Google.Protobuf/Collections/MapField.cs13
2 files changed, 26 insertions, 1 deletions
diff --git a/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs b/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs
index 08f1a19c..29c4c2a9 100644
--- a/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs
+++ b/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs
@@ -523,6 +523,20 @@ namespace Google.Protobuf.Collections
keys.CopyTo(array, 1);
CollectionAssert.AreEqual(new[] { null, "foo", "x", null }, array);
}
+
+ // Just test keys - we know the implementation is the same for values
+ [Test]
+ public void NonGenericViewCopyTo()
+ {
+ IDictionary map = new MapField<string, string> { { "foo", "bar" }, { "x", "y" } };
+ ICollection keys = map.Keys;
+ // Note the use of the Array type here rather than string[]
+ Array array = new string[4];
+ Assert.Throws<ArgumentException>(() => keys.CopyTo(array, 3));
+ Assert.Throws<ArgumentOutOfRangeException>(() => keys.CopyTo(array, -1));
+ keys.CopyTo(array, 1);
+ CollectionAssert.AreEqual(new[] { null, "foo", "x", null }, array);
+ }
[Test]
public void KeysContains()
diff --git a/csharp/src/Google.Protobuf/Collections/MapField.cs b/csharp/src/Google.Protobuf/Collections/MapField.cs
index 6dcdc100..004ff54b 100644
--- a/csharp/src/Google.Protobuf/Collections/MapField.cs
+++ b/csharp/src/Google.Protobuf/Collections/MapField.cs
@@ -735,7 +735,18 @@ namespace Google.Protobuf.Collections
public void CopyTo(Array array, int index)
{
- throw new NotImplementedException();
+ if (index < 0)
+ {
+ throw new ArgumentOutOfRangeException("arrayIndex");
+ }
+ if (index + Count >= array.Length)
+ {
+ throw new ArgumentException("Not enough space in the array", "array");
+ }
+ foreach (var item in this)
+ {
+ array.SetValue(item, index++);
+ }
}
}
}