vin*_*ani 17 .net c# multithreading
public enum MyEnum{Value1, Value2}
class MyClass
{
private MyEnum _field;
public MyEnum Field // added for convenience
{
get { return _field; }
set { Interlocked.Exchange(ref _field, value); // ERROR CS0452 }
}
}
Run Code Online (Sandbox Code Playgroud)
可以解决:
public enum MyEnum{Value1, Value2}
public class MyClass2
{
private int _field; //change to int
public MyEnum Field // added for convenience
{
get { return (MyEnum)_field; }
set { System.Threading.Interlocked.Exchange(ref _field, (int)value); }
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来解决这个问题?
有没有更好的方法来解决这个问题?
如果你需要使用Interlocked.Exchange那么这是最好的方法,事实上我认为这是交换枚举的唯一方法.
您收到编译器错误的原因是编译器认为您要使用Exchange<T>,但T需要是一个引用类型才能使用,因为您没有使用它失败的引用类型.所以,最好的解决方法是int像你一样强制转换为一个,从而强制编译器使用非泛型Exchange(int, int).
您似乎不需要Interlocked.Exchange的“交换”功能,因为您忽略了它的返回值。因此,我认为可能使您最快乐的解决方案是将_field标记为volatile:
private volatile MyEnum _field;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4528 次 |
| 最近记录: |