如何在不在 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;
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;