C# 可空类型(Nullable)详解 在 C# 中**可空类型Nullable Types允许值类型Value Types**存储null值。在数据库开发、Web 开发以及企业级应用中非常常见。一、为什么需要可空类型普通值类型不能为null。例如int age null; // ❌ 编译错误因为intdoubleboolDateTime都属于值类型它们必须有一个值。但是现实开发中经常会出现用户年龄未知出生日期未知成绩未录入这些情况都需要一个没有值的状态。因此 C# 提供了 Nullable。二、Nullable 的写法有两种写法。第一种完整写法Nullableint age null;等价于Nullableint age 18;第二种推荐使用?int? age null;其实就是Nullableint的语法糖。例如double? price null; bool? result null; DateTime? birthday null;三、示例using System; class Program { static void Main() { int? age null; Console.WriteLine(age); } }输出什么也没有因为值就是 null。再赋值int? age 20; Console.WriteLine(age);输出20四、HasValue 属性判断是否有值。int? age null; Console.WriteLine(age.HasValue);输出False再看int? age 25; Console.WriteLine(age.HasValue);输出True五、Value 属性获取真正的值。int? age 25; Console.WriteLine(age.Value);输出25但是int? age null; Console.WriteLine(age.Value);运行结果System.InvalidOperationException Nullable object must have a value.所以不要在 HasValue 为 false 时访问 Value。正确写法if (age.HasValue) { Console.WriteLine(age.Value); }六、GetValueOrDefault()获取值。如果为空就返回默认值。int? age null; Console.WriteLine(age.GetValueOrDefault());输出0因为 int 默认值就是 0。也可以指定默认值Console.WriteLine(age.GetValueOrDefault(18));输出18七、空合并运算符 ??这是 Nullable 最常用的功能。int? age null; Console.WriteLine(age ?? 18);输出18意思如果左边不是 null返回左边如果左边是 null返回右边例如int? age 30; Console.WriteLine(age ?? 18);输出30八、空合并赋值 ??C# 8.0 新增。例如string name null; name ?? Tom; Console.WriteLine(name);输出Tom如果已经有值string name Jack; name ?? Tom; Console.WriteLine(name);输出Jack不会覆盖。九、空条件运算符 ?.用于防止空引用异常。例如Student stu null; Console.WriteLine(stu?.Name);不会报错。输出null如果不用Console.WriteLine(stu.Name);就会NullReferenceException十、可空类型之间运算int? a 10; int? b 20; Console.WriteLine(a b);输出30如果其中一个是 nullint? a null; int? b 20; Console.WriteLine(a b);输出结果也是 null。因为null 20 null十一、判断是否为空最简单if (age null) { Console.WriteLine(没有年龄); }或者if (age ! null) { Console.WriteLine(age); }也可以if (age.HasValue) { Console.WriteLine(age.Value); }十二、NullableT 常用成员成员作用HasValue是否有值Value获取值GetValueOrDefault()获取值没有则返回默认值GetValueOrDefault(x)没有值返回指定值十三、值类型与引用类型类型是否可为 nullint❌double❌bool❌DateTime❌int?✅double?✅bool?✅DateTime?✅string✅引用类型object✅引用类型补充C# 8.0虽然string本身可以为null但启用**可空引用类型Nullable Reference Types**后可以用string?明确表示允许为null而string表示不应为null编译器会提供相应的空值警告。这与int?可空值类型是不同的概念。十四、实际开发案例假设数据库中的年龄字段允许为空public class User { public string Name { get; set; } public int? Age { get; set; } }使用User user new User(); user.Name 张三; user.Age null; Console.WriteLine(user.Age ?? 18);输出18表示如果数据库没有年龄就默认显示 18。十五、最佳实践优先使用T?如int?、DateTime?代码更简洁。读取值前先判断HasValue或使用??提供默认值避免直接访问Value。数据库字段可为空时实体类对应属性应使用可空值类型。区分两类可空int?可空值类型Nullableint。string?可空引用类型C# 8.0 的编译器空值分析。十六、小结语法说明int? age声明可空整型Nullableintint?的完整写法HasValue判断是否有值Value获取值需确保不为nullGetValueOrDefault()获取值或类型默认值GetValueOrDefault(x)获取值或指定默认值??空合并运算符提供默认值??空合并赋值仅在为空时赋值?.空条件运算符避免空引用异常

相关新闻

最新新闻

开发者必读:Open-eBackup贡献指南与代码提交流程

开发者必读:Open-eBackup贡献指南与代码提交流程

开发者必读:Open-eBackup贡献指南与代码提交流程 【免费下载链接】open-eBackup Open-ebackup is software that is compatible with multiple application ecosystems, featuring security, deduplication, and compression functionalities. 项目地址: https://…

2026/7/7 19:13:02
kmpi核心架构解析:深入理解高性能计算消息传递机制

kmpi核心架构解析:深入理解高性能计算消息传递机制

kmpi核心架构解析:深入理解高性能计算消息传递机制 【免费下载链接】kmpi kmpi is a message passing library for HPC. 项目地址: https://gitcode.com/openeuler/kmpi 前往项目官网免费下载:https://ar.openeuler.org/ar/ 什么是kmpi&#xff…

2026/7/7 19:13:02
UOS Libvirt Exporter配置详解:连接远程libvirt与TLS安全认证

UOS Libvirt Exporter配置详解:连接远程libvirt与TLS安全认证

UOS Libvirt Exporter配置详解:连接远程libvirt与TLS安全认证 【免费下载链接】uos-libvirtd-exporter A Prometheus exporter for libvirtd 项目地址: https://gitcode.com/openeuler/uos-libvirtd-exporter 前往项目官网免费下载:https://ar.op…

2026/7/7 19:13:02
Java毕设项目:基于 Java 的电商信息管理系统的设计与实现 基于传统 Web 架构的网上商城服务系统的设计与实现 (源码+文档,讲解、调试运行,定制等)

Java毕设项目:基于 Java 的电商信息管理系统的设计与实现 基于传统 Web 架构的网上商城服务系统的设计与实现 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/7 19:13:02
深入理解openEuler/os-compat-analyzer内核符号比对:CRC冲突如何影响系统稳定性

深入理解openEuler/os-compat-analyzer内核符号比对:CRC冲突如何影响系统稳定性

深入理解openEuler/os-compat-analyzer内核符号比对:CRC冲突如何影响系统稳定性 【免费下载链接】os-compat-analyzer The os-compat-analyzer is a compatibility analysis tool for operating systems and upper-layer software, supporting OS migration and ope…

2026/7/7 19:13:02
Donau集群环境变量配置指南:SLURM_*变量到Donau的完美转换

Donau集群环境变量配置指南:SLURM_*变量到Donau的完美转换

Donau集群环境变量配置指南:SLURM_*变量到Donau的完美转换 【免费下载链接】donau-slurm-wrappers donau-slurm-wrappers provide some scripts for Slurm Users to submit and manage jobs in Donau cluster environment 项目地址: https://gitcode.com/openeule…

2026/7/7 19:08:01

月新闻