当前位置: 首页 > article >正文

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

http://www.kler.cn/news/341670.html

相关文章:

  • Linux服务器安全-使用非root账号登陆
  • linux udev详解
  • 深入了解 MySQL 中的 JSON_CONTAINS
  • 《深入浅出LLM基础篇》(五):Propmt工程优化
  • 光控资本:科创板股票代码开头是什么,科创板股票代码?
  • 卷积神经网络细节问题及知识点
  • LVS搭建负载均衡
  • 49.字母异位词分组
  • uniapp view怎么按长度排列一行最多四个元素,并且换行后,每一行之间都有间隔
  • 基于SpringBoot+Vue+uniapp的高校教务管理小程序系统设计和实现
  • 鸿蒙harmonyos next flutter混合开发之开发FFI plugin
  • 量化交易与基础投资工具介绍
  • TIM的PWM模式
  • Java使用注解进行参数校验
  • 【每天学点AI】大模型如何做情感分类?BERT是如何做情感分类的?
  • 等保测评是什么?为什么要做等保测评?
  • 技术分享 —— JMeter接口与性能测试实战!
  • 探索一机两用号召是否和源代码保密冲突
  • 智能听诊器:宠物健康教育的创新工具
  • 国产工具链GCKontrol-GCAir助力控制律开发快速验证