我想用Interlocked.CompareExchange
与从int继承,像这样的枚举类型:如何将ref [enum type]转换为ref int?
public enum MyEnum : int { A, B }
public class MyClass
{
private static readonly MyEnum s_field = MyEnum.A;
public void Foo()
{
if (Interlocked.CompareExchange(ref s_field, MyEnum.B, MyEnum.A) == MyEnum.A)
{
Console.WriteLine("Changed from A to B");
}
}
}
然而,CompareExchange
只引用类型和选择值类型(见here)的作品。由于MyEnum
是真正的皮肤下面一个int,我想我应该能够把它作为一个参考INT:
// should call CompareExchange(ref int, int, int) overload
Interlocked.CompareExchange(ref s_field, (int)MyEnum.B, (int)MyEnum.A);
然而,这似乎并没有任何工作。我得到以下错误:
Error CS1503: Argument 1: cannot convert from 'ref MyEnum' to 'ref int'
铸造之前,它通过,例如ref (int)s_field
,也没有帮助。
我该如何解决这个问题?有没有办法使用CompareExchange
和枚举,或者我必须使用整数吗?
是否有你的工作枚举任何具体的原因是什么? “互锁”限于数字在这reguas ...你可以使用常量(我知道,...设计气味,但)? –
@AndreasNiedermair是的,我只是觉得代码看起来更好用枚举。 –
你不能做你想做的事情,因为'Interlocked'没有提供API的'enum'变种。你必须使用'int'。 – GreatAndPowerfulOz