Search code examples
c#clrboxingvalue-typeunboxing

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


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

E.g. if I have object o = 5; and I want to change the value of the boxed 5 to 6, how can I do that?

The o = 6; will create a new object on the heap and assign the reference to that object to the o. Are there any other ways to change the boxed value?


Solution

  • You can do the "boxing" yourself, than you can modify it.

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

    This prevents the automatic boxing.

    If you define yourself an conversion operator

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

    You can keep the same syntax as above. But this syntax will create a new object as you see. To modify the object, you would have to

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