Armadilhas de Tipos Anuláveis em C#: Quando T? Não é o Que Você Pensa
2025-08-29
A reutilização da sintaxe `T?` em C# para tipos de valor anuláveis e tipos de referência anuláveis cria confusão. Para tipos de valor, `T?` é açúcar sintático para `Nullable`, representando tipos distintos. No entanto, para tipos de referência, `T?` é meramente um marcador de intenção; após a compilação, `T?` e `T` são o mesmo tipo. Essa diferença leva a erros de compilação ao escrever métodos genéricos. O artigo demonstra esse problema com um método `SelectNotNull` que imita o `List.choose` do F#. A solução envolve sobrecarga de métodos com restrições de tipo (`where TR : class` e `where TR : struct`) para desambiguar tipos de valor e referência. Embora o problema seja resolvido, o design permanece inelegante.
Leia mais
Desenvolvimento
Tipos Anuláveis