Browse Source

Avoiding duplicate enumeration of collection

bartdesmet 10 years ago
parent
commit
3e1fe0448d

+ 8 - 9
Rx.NET/Source/System.Reactive.Core/Reactive/Disposables/CompositeDisposable.cs

@@ -46,14 +46,8 @@ namespace System.Reactive.Disposables
         /// <exception cref="ArgumentNullException"><paramref name="disposables"/> is null.</exception>
         /// <exception cref="ArgumentException">Any of the disposables in the <paramref name="disposables"/> collection is null.</exception>
         public CompositeDisposable(params IDisposable[] disposables)
+            : this((IEnumerable<IDisposable>)disposables)
         {
-            if (disposables == null)
-                throw new ArgumentNullException("disposables");
-            if (disposables.Any(d => d == null))
-                throw new ArgumentException("Disposables collection can not contain null values.", "disposables");
-
-            _disposables = new List<IDisposable>(disposables);
-            _count = _disposables.Count;
         }
 
         /// <summary>
@@ -66,10 +60,15 @@ namespace System.Reactive.Disposables
         {
             if (disposables == null)
                 throw new ArgumentNullException("disposables");
-            if (disposables.Any(d => d == null))
-                throw new ArgumentException("Disposables collection can not contain null values.", "disposables");
 
             _disposables = new List<IDisposable>(disposables);
+            
+            //
+            // Doing this on the list to avoid duplicate enumeration of disposables.
+            //
+            if (_disposables.Contains(null))
+                throw new ArgumentException("Disposables collection can not contain null values.", "disposables");
+            
             _count = _disposables.Count;
         }