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

问题描述 投票:1回答:1

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

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

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

c# clr boxing value-type unboxing
1个回答
0
投票

您可以自己进行“装箱”,而不可以对其进行修改。

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;
© www.soinside.com 2019 - 2024. All rights reserved.