如何在不在 C# 中创建新对象的情况下修改装箱值?

How to modify the boxed value without creating a new object in C#?

C#中如何在不创建新对象的情况下修改装箱值?

例如如果我有 object o = 5; 并且我想将盒装 5 的值更改为 6,我该怎么做?

o = 6; 将在堆上创建一个新对象并将对该对象的引用分配给 o。还有其他方法可以更改盒装值吗?

您可以自己做 "boxing",而不是修改它。

class Box
{
     public int Value { get;set;}
}

这样可以防止自动装箱。

如果您自己定义一个转换运算符

     public static Box operator(int value) => new Box() { Value = value }

您可以保留与上述相同的语法。但是如您所见,此语法将创建一个新对象。要修改对象,您必须

  Box b = 5;
  object o = b;
  ((Box)o).Value = 6;
 // or
  b.Value = 6;