0Pricing
C# Academy · 课时

可空值类型简介

声明 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 可空值类型简介
  2. HasValue 与 Value 属性
  3. 空合并运算符
  4. 计算中的可空值
← 返回 C# Academy