Interlocked.Exchange可空小数

Pin*_*ong 1 .net c# exchange-server nullable decimal

我想交换两个可以为空的十进制值,如下所示:

o2 = Interlocked.Exchange(ref o1, o2);
Run Code Online (Sandbox Code Playgroud)

类型'十进制?' 必须是引用类型才能在泛型类型或方法'System.Threading.Interlocked.Exchange(ref T,T)'中将其用作参数'T'.

有没有比这更好的想法:

decimal? temp = o1;
o1 = o2;
o2 = temp;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Mar*_*ell 5

两个想法:

  • 把它当作object消费者来对待
  • 创建一个Box<T> where T:struct(并使其成为不可变的),并交换一些Box<decimal>引用

在这两种情况下,消费者应该在其他任何事情之前克隆该值(没有双读;它可能在读取之间改变).