public void BindingContext_Count_GetWithNullWeakReferenceTarget_ScrubsWeakRefs() { var context = new BindingContext(); var dataSource1 = new DataSource { Property = 1 }; var dataSource2 = new DataSource { Property = 2 }; PropertyManager manager1 = Assert.IsAssignableFrom <PropertyManager>(context[dataSource1, "Property"]); PropertyManager manager2 = Assert.IsAssignableFrom <PropertyManager>(context[dataSource2, "Property"]); var array = new DictionaryEntry[4]; ((ICollection)context).CopyTo(array, 0); WeakReference reference1 = Assert.IsType <WeakReference>(array.Single(p => ((WeakReference)p.Value).Target == manager1).Value); WeakReference reference2 = Assert.IsType <WeakReference>(array.Single(p => ((WeakReference)p.Value).Target == manager2).Value); Assert.Same(manager1, reference1.Target); Assert.Same(manager2, reference2.Target); // Simulate a GC by assigning the weak reference to null. reference1.Target = null; reference2.Target = null; // Verify these weak references have been scrubbed. Assert.Equal(2, ((ICollection)context).Count); }