C#Intermedio6 nov 2025
Cuando null no es tan null como crees... ¡para 'is object'!
snippet.c#
int? nullableInt = null;
object regularObject = null;
Console.WriteLine($"nullableInt is object: {nullableInt is object}");
Console.WriteLine($"regularObject is object: {regularObject is object}");¿Qué crees que imprime?
✅ Salida Esperada
nullableInt is object: False
regularObject is object: False⚠️ Salida Real
nullableInt is object: True
regularObject is object: False¿Por qué pasa esto?
¡Prepárate para un giro de guion en la tierra de C#! 🎢 Aquí, el `null` no siempre significa `null` cuando bailas con `is object`.
- `nullableInt` es un `int?`, o sea, un `Nullable<int>`. ¡Y `Nullable<T>` es un **struct**!
- Todos los `struct` en C# son tipos de valor que pueden ser **boxeados** a `object`. ¡Son como mini-objetos en sí mismos! 📦
- Así que, cuando haces `nullableInt is object`, C# no pregunta si el *valor* dentro de `nullableInt` es un objeto. ¡Pregunta si la *instancia de `Nullable<int>`* puede ser tratada como un `object`! Y como es un `struct`, la respuesta es **SÍ**, incluso si su valor interno es `null`. Es como si el embalaje fuera un objeto, ¡aunque no haya nada dentro!
- En cambio, `regularObject` es una **referencia** a un objeto. Si es `null`, significa que no apunta a NADA. No hay instancia, no hay objeto. Por eso `regularObject is object` es `false`.
¡Es un choque entre la ausencia de un valor y la naturaleza de un tipo! ¡C# y sus sutilezas!
Conceptos relacionados
nullable-typestype-checkingboxing