在 C# 中,类型定义中的问号(?
)主要用于控制类型的可空性,但具体行为因类型(值类型或引用类型)和 C# 版本而异。以下是清晰分类的说明:
一、可空值类型(T?
,适用于所有 C# 版本)
用途:允许值类型(如 int
、DateTime
等)存储 null
值。
语法:在值类型后加 ?
,底层由 System.Nullable<T>
结构实现。
示例:
int? age = null; // 声明可空整型 DateTime? date = null; // 声明可空日期
核心操作:
- 判空:通过
HasValue
属性检查是否有值。if (age.HasValue) Console.WriteLine(age.Value);
- 安全取值:使用
??
提供默认值,避免InvalidOperationException
。int safeAge = age ?? 0; // 若 age 为 null,返回 0
- 强制转换