如何在不使用C#创建新对象的情况下修改盒装值?
例如如果我有object o = 5;
,并且想将装箱的5
的值更改为6
,该怎么办?
o = 6;
将在堆上创建一个新对象,并将对该对象的引用分配给o
。还有其他方法可以更改盒装值吗?
您可以自己进行“装箱”,而不可以对其进行修改。
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;