소스 검색

Use an empty array instead of a null reference for an empty repeated field.

Jon Skeet 10 년 전
부모
커밋
d7dda2fed8
1개의 변경된 파일10개의 추가작업 그리고 22개의 파일을 삭제
  1. 10 22
      csharp/src/ProtocolBuffers/Collections/RepeatedField.cs

+ 10 - 22
csharp/src/ProtocolBuffers/Collections/RepeatedField.cs

@@ -6,25 +6,21 @@ namespace Google.Protobuf.Collections
 {
     public sealed class RepeatedField<T> : IList<T>, IEquatable<RepeatedField<T>>
     {
+        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<T> comparer = EqualityComparer<T>.Default;
             for (int i = 0; i < count; i++)