Ttrampas de Tipos Nulo en C#: Cuando T? No es lo que Piensas
La reutilización de la sintaxis `T?` en C# para tipos de valor nulos y tipos de referencia nulos crea confusión. Para tipos de valor, `T?` es azúcar sintáctica para `Nullable`, representando tipos distintos. Sin embargo, para tipos de referencia, `T?` es meramente un marcador de intención; después de la compilación, `T?` y `T` son el mismo tipo. Esta diferencia lleva a errores de compilación al escribir métodos genéricos. El artículo demuestra este problema con un método `SelectNotNull` que imita el `List.choose` de F#. La solución implica sobrecarga de métodos con restricciones de tipo (`where TR : class` y `where TR : struct`) para desambiguar tipos de valor y referencia. Aunque el problema se resuelve, el diseño sigue siendo poco elegante.