第十六式:C# 可空类型 (空空如也)

绝世
秘籍
冲儿,你可知“无”也是一种境界?
在江湖上,有时候你不知道对手是谁,或者根本就没有对手。这时候,你就需要一种特殊的状态——空 (null)
就像我的酒葫芦有时候是空的?
哼!普通的整数(int)是不能空的!你见过谁的年龄是“空”的?
但在 C# 里,我们可以给它开个后门,这就叫可空类型 (Nullable Types)

1. 定义可空类型 (?) - 虚怀若谷

在数据类型后面加个问号 ?,它就可以接受 null 值了。


int normalInt = 10;
// normalInt = null; // 报错!普通侠客不能练这招。

int? nullInt = 10;
nullInt = null; // 可以!现在它里面什么都没有,是空的。

bool? isHappy = null; // 开心?不开心?还是没感觉(null)?
        

2. Null 合并运算符 (??) - 备用方案

如果发现是空的,就用个备胎顶上。


int? myMoney = null;

// 如果 myMoney 是 null,就当做 0 块钱。
int actualMoney = myMoney ?? 0; 
        
在数据库里,很多字段可能是空的(比如用户的“昵称”可能没填)。
这时候用 string? 或者 int? 就非常管用,能避免程序因为找不到数据而崩溃。
🈳

动手时刻:空城计

编写代码:

  1. 定义一个可空的整数 int? score = null;
  2. 尝试输出它。
  3. 使用 ?? 运算符,如果它是空的,就输出 "缺考"。
查看参考答案

int? score = null;

Console.WriteLine("分数:" + score); // 输出空,什么都看不见

// 必须先转换成字符串或者用 object 才能和字符串拼接而不报错,但在 Console.WriteLine 里直接拼一般没事。
// 更严谨的写法:
string message = (score ?? -1).ToString(); 
if (message == "-1") message = "缺考";

Console.WriteLine("最终结果:" + message);
                    

成就解锁:【虚无主义】 获得:无字天书