【发布时间】:2013-08-23 21:20:50
【问题描述】:
我正在尝试将此枚举与 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");
}
但是有没有更好的方法来做到这一点?
【问题讨论】:
-
您展示的内容(将其视为
int并进行强制转换)基本上正是我所做的。 -
@MarcGravell:基本上?
-
说实话,这没什么大不了的。就我个人而言,我会将其保留为
enum,但在进行交换之前将其转换。 -
@James 你不能那样做;该字段需要为
int才能在调用中用作ref。你不能在ref期间施放。 -
@James:那会扼杀使用
CompareExchange的理由。
标签: c# interlocked