C# 可空类型详解:安全处理 Null 值的最佳实践
C# 提供特殊的可空类型,允许在正常取值范围外额外赋值 null。
例如:Nullable<Int32> 可存储 -2,147,483,648 到 2,147,483,647 之间的任意值或 null;Nullable<bool> 可存储 true、false 或 null。
声明语法
<data_type>? <variable_name> = null;
使用示例
using System;
namespace CalculatorApplication {
class NullablesAtShow {
static void Main(string[] args) {
int? num1 = null;
int? num2 = 45;
double? num3 = new double?();
double? num4 = 3.14157;
bool? boolval = new bool?();
Console.WriteLine("Nullables at Show: {0}, {1}, {2}, {3}", num1, num2, num3, num4);
Console.WriteLine("A Nullable boolean value: {0}", boolval);
Console.ReadLine();
}
}
}
输出:
Nullables at Show: , 45, , 3.14157
A Nullable boolean value:
注意:null 值输出为空字符串。
空合并运算符 (??)
空合并运算符用于可空值类型和引用类型。若第一个操作数为 null,返回第二个操作数值;否则返回第一个操作数值。隐式转换必须可能。
示例
using System;
namespace CalculatorApplication {
class NullablesAtShow {
static void Main(string[] args) {
double? num1 = null;
double? num2 = 3.14157;
double num3;
num3 = num1 ?? 5.34;
Console.WriteLine("Value of num3: {0}", num3); // 5.34
num3 = num2 ?? 5.34;
Console.WriteLine("Value of num3: {0}", num3); // 3.14157
Console.ReadLine();
}
}
}
可空类型核心属性与方法
| 成员 | 说明 |
|---|---|
HasValue | bool,指示是否有非 null 值 |
Value | 获取底层值(若为 null 抛出异常) |
GetValueOrDefault() | 获取值或默认值(如 0、false) |
GetValueOrDefault(T) | 获取值或指定默认值 |
安全访问模式
int? x = null;
// 模式 1:HasValue 检查
if (x.HasValue) Console.WriteLine(x.Value);
// 模式 2:GetValueOrDefault
Console.WriteLine(x.GetValueOrDefault(-1)); // -1
// 模式 3:空合并运算符
Console.WriteLine(x ?? -1); // -1
// 模式 4:C# 7.0+ 模式匹配
if (x is int val) Console.WriteLine(val);
最佳实践:数据库交互、配置读取、外部 API 调用等可能缺失值的场景优先使用可空类型,避免魔法数字(如 -1 表示无效)。
C语言
- AgCu20 合金:23°C 下全面力学与热学性能
- 合金15CDV6 (DIN 1.7734):高强度、高韧性、易焊接
- DIN 1.7734 15CDV6合金:高强度、高韧性、易焊接
- 15CDV6合金 (DIN 1.7734) – 高强度、易焊接、优异韧性
- PtNi10 铂镍合金 — 高强度高温电接触材料
- PtIr10 铂铱合金 — 高强度高温生物相容材料
- Corroplast 耐腐蚀钢板 – 精密加工用高性能塑料模具钢
- X46 AM FCE:关键管道应用用高性能 API 5L 钢材
- X56 AM FCE:高性能管道用优质 API 5L 钢材
- Ferro-Titanit® Cromoni – 高强度、非磁性钛合金
- C# 特性完全指南:预定义特性、自定义特性与元数据编程
- 掌握 Java 8 Optional:实现空安全代码的实用指南