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 {