I was wondering if this actually worked ?
private void RegisterKeyChanged(T item) { item.OnKeyChanged += (o, k) => ChangeItemKey((T)o, k); } private
If you check with the document for Delegate.Equality, you would find out they are not compared by reference.