¿Cómo probar si un valor está encuadrado en C # / .NET?

Estoy buscando una manera de escribir código que pruebe si un valor está encuadrado.

is investigaciones preliminares indican que .NET hace todo lo posible para ocultar el hecho, lo que significa queGetType() yIsValueType no revela la diferencia entre un valor en caja y un valor sin caja. Por ejemplo, en las siguientes expresiones de LinqPad C #, tengo fe en queo1 está en caja yi1 no está encuadrado, pero me gustaría una forma de probarlo en código o, en segundo lugar, una forma de saberSIN LUGAR A DUD al mirar cualquier variable o valor, incluso si su tipo es "dinámico" u "objeto", ya sea en caja o no en caja.

¿Algún consejo

// boxed? -- no way to tell from these answers!
object o1 = 123;
o1.GetType().Dump("o1.GetType()");
o1.GetType().IsValueType.Dump("o1.GetType().IsValueType");

// not boxed? -- no way to tell from these answers!
int i1 = 123;
i1.GetType().Dump("i1.GetType()");
i1.GetType().IsValueType.Dump("i1.GetType().IsValueType");

Respuestas a la pregunta(9)

Su respuesta a la pregunta