可空值类型

1、为什么要有可空值类型

有两种情况我们需要知道一个值类型的实例是否被赋过值。

一种情况是当实例是在数据库中的值时,在这种情况下,我们希望能够检查实例以判断这个值是否确实存在于数据库中。另外一种情况是当实例表示一个从其他远程数据源接收到的数据时,同样我们希望根据这个实例判断相应的数据项是否接收到了值。

System.Nullable<T>

未完待续。。。

在 C# 中,`int` 是一个**值类型**(`struct`),它不能被赋值为 `null`(空值)。如果你尝试这样做: ```csharp int number = null; // 编译错误! ``` 这会导致编译时错误,因为 `int` 不支持空值。 --- ### ✅ 解决方法:使用 **可空值类型(Nullable Value Type)** C# 提供了 `Nullable<T>` 结构,允许值类型包含 `null`。对于 `int`,你可以使用 `int?`,它是 `Nullable<int>` 的简写形式。 #### 正确代码示例: ```csharp int? number = null; // 合法:使用可空类型 // 条件赋值示例 int? result = null; int[] values = { 1, 2, 0, 4 }; foreach (int value in values) { if (value == 0) { result = 0; break; } } if (result.HasValue) { Console.WriteLine("result 的值是: " + result.Value); } else { Console.WriteLine("result 没有值(为 null)"); } ``` ### 输出: ``` result 的值是: 0 ``` --- ### 关键成员说明: - `int? number = null;`:声明一个可以为 `null` 的整数。 - `number.HasValue`:判断是否含有值(`true` 表示不是 `null`)。 - `number.Value`:获取实际的 `int` 值(仅在 `HasValue` 为 `true` 时可用,否则抛出异常)。 - `number ?? defaultValue`:空合并操作符,用于提供默认值: ```csharp int fallback = number ?? -1; // 如果 number 为 null,则使用 -1 ``` --- ### 替代语法(等价): ```csharp Nullable<int> number = null; // 等同于 int? number = null; ``` --- ### 为什么不允许 `int` 直接为 `null`? 因为 `int` 是值类型,它直接存储数据,并且在栈上分配内存,必须始终有一个确定的值(如 0、1、-5 等)。而引用类型(如 `string`、类对象)默认可以为 `null`,因为它们指向堆上的地址。 --- ### 小贴士: 从 C# 8.0 开始,如果启用了 **可空引用类型** 功能,虽然不影响值类型的空性,但可以帮助你在引用类型中更好地管理 `null` 风险。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值