From d7dda2fed8c37a83e2d4cd7ecc4201b628588c4c Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Fri, 19 Jun 2015 08:38:21 +0100 Subject: Use an empty array instead of a null reference for an empty repeated field. --- .../ProtocolBuffers/Collections/RepeatedField.cs | 32 +++++++--------------- 1 file changed, 10 insertions(+), 22 deletions(-) (limited to 'csharp') diff --git a/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs b/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs index 0cd5cf80..25651784 100644 --- a/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs +++ b/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs @@ -6,25 +6,21 @@ namespace Google.Protobuf.Collections { public sealed class RepeatedField : IList, IEquatable> { + private static readonly T[] EmptyArray = new T[0]; + private const int MinArraySize = 8; - private T[] array = null; + private T[] array = EmptyArray; private int count = 0; private void EnsureSize(int size) { - if (array == null) - { - array = new T[Math.Max(size, MinArraySize)]; - } - else + size = Math.Max(size, MinArraySize); + if (array.Length < size) { - if (array.Length < size) - { - int newSize = Math.Max(array.Length * 2, size); - var tmp = new T[newSize]; - Array.Copy(array, 0, tmp, 0, array.Length); - array = tmp; - } + int newSize = Math.Max(array.Length * 2, size); + var tmp = new T[newSize]; + Array.Copy(array, 0, tmp, 0, array.Length); + array = tmp; } } @@ -51,7 +47,7 @@ namespace Google.Protobuf.Collections public void Clear() { - array = null; + array = EmptyArray; count = 0; } @@ -62,10 +58,6 @@ namespace Google.Protobuf.Collections public void CopyTo(T[] array, int arrayIndex) { - if (this.array == null) - { - return; - } Array.Copy(this.array, 0, array, arrayIndex, count); } @@ -183,10 +175,6 @@ namespace Google.Protobuf.Collections { throw new ArgumentNullException("item"); } - if (array == null) - { - return -1; - } // TODO(jonskeet): Does this box for enums? EqualityComparer comparer = EqualityComparer.Default; for (int i = 0; i < count; i++) -- cgit v1.2.3