Fallstricke bei Nullable-Typen in C#: Wenn T? nicht das ist, was Sie denken
Die Wiederverwendung der Syntax `T?` in C# für sowohl nullable Value Types als auch nullable Reference Types führt zu Verwirrung. Für Value Types ist `T?` syntaktischer Zucker für `Nullable` und repräsentiert unterschiedliche Typen. Für Reference Types hingegen ist `T?` lediglich ein Hinweis auf die Absicht; nach der Kompilierung sind `T?` und `T` vom selben Typ. Dieser Unterschied führt zu Kompilierfehlern beim Schreiben generischer Methoden. Der Artikel demonstriert dieses Problem mit einer `SelectNotNull`-Methode, die F#'s `List.choose` nachahmt. Die Lösung besteht in der Methodenüberladung mit Typbeschränkungen (`where TR : class` und `where TR : struct`), um die Mehrdeutigkeit zwischen Value Types und Reference Types aufzulösen. Obwohl das Problem gelöst ist, bleibt das Design unausgewogen.