The problem is here:
this.currentState as Enum == other.currentState as Enum Enum is a reference type, so your enum gets boxed into a (new, unique) object. As a result it no longer compares equal to any other boxed instance. Unfortunately
enum instances don't implementtypes do the Right Thing for overriding IComparableEquals or, though IEquatable either(as @hvd so correctly points out), so it's not as simple as adding that as a constraint. You can however get a comparer for them:
Comparer<T> cmp = Comparer<T>.Default; And now you can just do
cmp.Compare(this.currentState, other.currentState) == 0 You could also simply convert to long, since any enum is guaranteed to fit in that:
this.currentState.ToInt64Equals(null) == other.currentState.ToInt64(null)