c# 可空引用类型

在 C# 8 中,引入了可空引用类型(Nullable Reference Types,NRT),这是一项增强特性,旨在提高代码的安全性并减少运行时的 NullReferenceException。以下是关于可空引用类型的详细讲解。

什么是可空引用类型

在 C# 中,引用类型默认是可为空的,这意味着它们可以被赋值为 null。而可空引用类型的引入允许开发者明确指定某个引用类型是否可以为 null,从而提高代码的安全性和可读性。

启用可空引用类型

要在项目中启用可空引用类型,通常会在项目的 .csproj 文件中添加以下属性:

<PropertyGroup>
    <Nullable>enable</Nullable>
</PropertyGroup>

语法与使用

不允许为 Null 的引用类型:
如果你希望某个引用类型不能为空,可以直接声明:

public class Person
{
    public string Name { get; set; }  // Name 不能为空
}

允许为 Null 的引用类型:

如果你的引用类型可以为 null,则需要在类型后面加上问号 ?:

public class Person
{
    public string? Nickname { get; set; }  // Nickname 可以为 null
}

编译器的警告

当启用了可空引用类型后,编译器会对可能导致 NullReferenceException 的情况提供警告。例如:

public void PrintName(Person person)
{
    Console.WriteLine(person.Name);  // 可能会引发编译警告,因为 Name 可能为 null
}

通过使用可为空的引用类型,将明确指定参数和属性是否可以为 null,从而提高代码的健壮性。

隐式和显式可空

隐式可空:在不涉及问号 ? 的情况下,基本的数据类型和引用类型的声明即表示非空引用类型。
显式可空:使用问号来指示某个引用类型是否可以为 null。
示例
以下是一个包含可空引用类型的示例:

#nullable enable  // 启用可空引用类型

public class Example
{
    public string NonNullableProperty { get; set; } = string.Empty;  // 不可为 null
    public string? NullableProperty { get; set; }  // 可为 null

    public void Test()
    {
        // Example usage
        NonNullableProperty = null;  // 会引发编译警告
        NullableProperty = null;  // 没有警告

        Console.WriteLine(NullableProperty.Length);  // 会引发编译警告,因为 NullableProperty 可能为 null
    }
}

使用 null 许可的指令

在 C# 8 中,你可以使用 null 容许操作符(空条件操作符 ?.)和空合并操作符 (??) 来安全地处理可空引用类型。

空条件操作符:

var length = nullableString?.Length; // 如果 nullableString 为 null,length 为 null

空合并操作符:

var name = nullableString ?? "DefaultName"; // 如果 nullableString 为 null,使用 DefaultNa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou.cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值