Próbuję użyć Interlocked.CompareExchange
z tego wyliczenia:Interlocked.CompareExchange z wyliczenia
public enum State {
Idle,
Running,
//...
}
Poniższy kod nie kompiluje, ale to, co chcę, robię:
if (Interlocked.CompareExchange(ref state, State.Running, State.Idle) != State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Sure mogę użyć int zamiast wyliczenia i użyć właściwości:
private int state = (int)State.Idle;
public State { get { return (State)state; } }
Potem wyrzucił teksty stałe do int:
if (Interlocked.CompareExchange(ref state, (int)State.Running, (int)State.Idle) != (int)State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Ale czy istnieją lepsze sposoby na zrobienie tego?
Co które pokazujesz (traktując to jako 'int' i casting) jest w zasadzie dokładnie tym, co robię. –
@MarcGravell: zasadniczo? – joe
Szczerze mówiąc, to nie jest tak wielka sprawa. Osobiście po prostu zatrzymałbym to jako "enum", ale rzuciłem to przed wymianą. – James