Hasty Briefsbeta

双语

Nullable vs. Nullable in C#

9 months ago
  • #Nullable Types
  • #C#
  • #Programming
  • C#中的`T?`语法对值类型和引用类型表示两种不同概念,这导致了理解上的混淆。
  • 可空值类型(`T?`)在C# 2.0引入,是`Nullable<T>`的语法糖,使得`T?`和`T`成为不同的类型。
  • 可空引用类型(`T?`)在C# 8.0引入,作为空值预期的沟通工具,运行时`T?`和`T`仍是相同类型。
  • `T?`的重载引发了问题,例如在`SelectNotNull`方法中,无法同时完美处理值类型和引用类型。
  • 解决方案是创建两个重载方法(分别使用`where TR : class`和`where TR : struct`类型约束)来处理不同场景。
  • 这种方案虽然可行,但凸显了C#中重用`T?`表达两种不同用途带来的复杂性和怪异感。