可空值类型简介
声明 int?、double? 并了解 Nullable 。
可空值类型简介 是 CoddyKit 上的免费 C# Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
值类型不能为 Null
通常,int 始终保存一个数字,永远不会是 null。但有时您需要表示没有值的情况,例如缺少测量结果。
using System;
class Program {
static void Main() {
int count = 0;
Console.WriteLine(count);
}
}使用 ? 创建可空类型
在值类型后添加 ?,即可使其成为可空类型。int? 可以保存任意 int 值或 null。
using System;
class Program {
static void Main() {
int? maybe = null;
Console.WriteLine(maybe.HasValue);
maybe = 42;
Console.WriteLine(maybe);
}
}其他可空类型
任何值类型都可以成为可空类型,例如 double?、bool?、DateTime? 等。
using System;
class Program {
static void Main() {
double? temp = null;
bool? flag = true;
Console.WriteLine(temp.HasValue + " " + flag);
}
}完整写法 Nullable<T>
int? 只是结构体 Nullable<int> 的简写形式。两者编译后完全是同一种类型。
using System;
class Program {
static void Main() {
Nullable<int> a = 10;
int? b = 10;
Console.WriteLine(a == b);
}
}赋值为 Null
您可以直接将 null 赋给可空变量,之后再重新赋予实际值。
using System;
class Program {
static void Main() {
int? id = 100;
Console.WriteLine(id);
id = null;
Console.WriteLine(id.HasValue);
}
}输出为 Null 的可空值
输出值为 null 的可空变量时,会产生空字符串,而不是单词 null。
using System;
class Program {
static void Main() {
int? value = null;
Console.WriteLine("[" + value + "]");
}
}隐式转换为可空类型
普通的 int 会自动转换为 int?,因为每个 int 都是有效的可空 int。
using System;
class Program {
static void Main() {
int x = 7;
int? y = x;
Console.WriteLine(y);
}
}方法返回值中的可空类型
方法可以返回可空类型,以区分找到值和未找到任何内容这两种情况。
using System;
class Program {
static int? FindEven(int[] nums) {
foreach (int n in nums)
if (n % 2 == 0) return n;
return null;
}
static void Main() {
Console.WriteLine(FindEven(new[] {1, 3, 4}));
}
}比较可空值
相等性比较符合预期:如果两个可空值都为 null,或者都保存相同的值,那么它们就相等。
using System;
class Program {
static void Main() {
int? a = null;
int? b = null;
Console.WriteLine(a == b);
int? c = 5;
Console.WriteLine(c == 5);
}
}为何使用可空类型
可空值类型可以清晰地表示可选数据,例如允许为 NULL 的数据库列,或用户留空的字段。
using System;
class Program {
static void Main() {
int? userAge = null;
string msg = userAge.HasValue ? "Age set" : "Age unknown";
Console.WriteLine(msg);
}
}Nullable 是结构体
Nullable<T> 本身是值类型,因此可空变量不是引用类型,即使它可以为 null。
using System;
class Program {
static void Main() {
int? n = 3;
Console.WriteLine(n.GetType().Name);
}
}快速检查
请测试您对可空值类型的理解。
回顾
默认情况下,像 int 这样的值类型不能为 null。添加 ? 会创建可空类型(int?),它是 Nullable<T> 的简写形式。
可空类型可以表示缺失或可选数据,可以从基础类型隐式转换而来,并且它们本身是结构体。
常见问题解答
「可空值类型简介」课时是免费的吗?
是的 — 「可空值类型简介」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「可空值类型简介」这节课中我会学到什么?
声明 int?、double? 并了解 Nullable 。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「可空值类型简介」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。