The box creates a copy of the instance in question. The instance methods of value types are allowed to change the instance to which they are called, and if they do, silently invoking the method on the copy - this is not what needs to be done.
static class Program { static void Main() { var myStruct = new MyStruct(); Console.WriteLine(myStruct.i);
source share