diff --git a/src/Main/Core/Project/Src/Util/CommandWrapper.cs b/src/Main/Core/Project/Src/Util/CommandWrapper.cs index 3d42363f56..70009c5366 100644 --- a/src/Main/Core/Project/Src/Util/CommandWrapper.cs +++ b/src/Main/Core/Project/Src/Util/CommandWrapper.cs @@ -160,6 +160,8 @@ namespace ICSharpCode.Core public event EventHandler CanExecuteChanged { add { + if (value == null) + return; if (conditions.Count > 0 && RegisterConditionRequerySuggestedHandler != null) RegisterConditionRequerySuggestedHandler(value); @@ -169,6 +171,8 @@ namespace ICSharpCode.Core canExecuteChangedHandlersToRegisterOnCommand.Add(value); } remove { + if (value == null) + return; if (conditions.Count > 0 && UnregisterConditionRequerySuggestedHandler != null) UnregisterConditionRequerySuggestedHandler(value); diff --git a/src/Main/Core/Project/Src/Util/WeakCollection.cs b/src/Main/Core/Project/Src/Util/WeakCollection.cs index c393483db4..c6abeb3f50 100644 --- a/src/Main/Core/Project/Src/Util/WeakCollection.cs +++ b/src/Main/Core/Project/Src/Util/WeakCollection.cs @@ -61,21 +61,6 @@ namespace ICSharpCode.Core CheckNoEnumerator(); } - /// - /// Checks if the collection contains an item. Runtime: O(n). - /// - public bool Contains(T item) - { - if (item == null) - throw new ArgumentNullException("item"); - CheckNoEnumerator(); - foreach (T element in this) { - if (item.Equals(element)) - return true; - } - return false; - } - /// /// Removes an element from the collection. Returns true if the item is found and removed, /// false when the item is not found. @@ -84,13 +69,14 @@ namespace ICSharpCode.Core public bool Remove(T item) { if (item == null) - throw new ArgumentNullException("item"); + return false; CheckNoEnumerator(); + var comparer = EqualityComparer.Default; for (int i = 0; i < innerList.Count;) { T element = (T)innerList[i].Target; if (element == null) { RemoveAt(i); - } else if (element == item) { + } else if (comparer.Equals(element, item)) { RemoveAt(i); return true; } else {