Interlocked.CompareExchange с enum
Я пытаюсь использоватьInterlocked.CompareExchange
с этим перечислением:
public enum State {
Idle,
Running,
//...
}
Следующий код не компилируется, но я хочу это сделать:
if (Interlocked.CompareExchange(ref state, State.Running, State.Idle) != State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Конечно, я могу использовать int вместо enum и использовать свойство:
private int state = (int)State.Idle;
public State { get { return (State)state; } }
Затем приведите перечисления к int:
if (Interlocked.CompareExchange(ref state, (int)State.Running, (int)State.Idle) != (int)State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Но есть ли лучшие способы сделать это?