c# 可空引用范例

金歌  金牌会员 | 2024-10-11 13:27:27 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 928|帖子 928|积分 2784

在 C# 8 中,引入了可空引用范例(Nullable Reference Types,NRT),这是一项增强特性,旨在提高代码的安全性并淘汰运行时的 NullReferenceException。以下是关于可空引用范例的具体讲解。
什么是可空引用范例

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

要在项目中启用可空引用范例,通常会在项目标 .csproj 文件中添加以下属性:
  1. <PropertyGroup>
  2.     <Nullable>enable</Nullable>
  3. </PropertyGroup>
复制代码
语法与利用

不允许为 Null 的引用范例:
如果你希望某个引用范例不能为空,可以直接声明:
  1. public class Person
  2. {
  3.     public string Name { get; set; }  // Name 不能为空
  4. }
复制代码
允许为 Null 的引用范例:

如果你的引用范例可以为 null,则必要在范例背面加上问号 ?:
  1. public class Person
  2. {
  3.     public string? Nickname { get; set; }  // Nickname 可以为 null
  4. }
复制代码
编译器的告诫

当启用了可空引用范例后,编译器会对可能导致 NullReferenceException 的情况提供告诫。比方:
  1. public void PrintName(Person person)
  2. {
  3.     Console.WriteLine(person.Name);  // 可能会引发编译警告,因为 Name 可能为 null
  4. }
复制代码
通过利用可为空的引用范例,将明确指定参数和属性是否可以为 null,从而提高代码的结实性。
隐式和显式可空

隐式可空:在不涉及问号 ? 的情况下,根本的数据范例和引用范例的声明即表示非空引用范例。
显式可空:利用问号来指示某个引用范例是否可以为 null。
示例
以下是一个包罗可空引用范例的示例:
  1. #nullable enable  // 启用可空引用类型
  2. public class Example
  3. {
  4.     public string NonNullableProperty { get; set; } = string.Empty;  // 不可为 null
  5.     public string? NullableProperty { get; set; }  // 可为 null
  6.     public void Test()
  7.     {
  8.         // Example usage
  9.         NonNullableProperty = null;  // 会引发编译警告
  10.         NullableProperty = null;  // 没有警告
  11.         Console.WriteLine(NullableProperty.Length);  // 会引发编译警告,因为 NullableProperty 可能为 null
  12.     }
  13. }
复制代码
利用 null 许可的指令

在 C# 8 中,你可以利用 null 容许操作符(空条件操作符 ?.)和空归并操作符 (??) 来安全地处理惩罚可空引用范例。
空条件操作符:
  1. var length = nullableString?.Length; // 如果 nullableString 为 null,length 为 null
复制代码
空归并操作符:
  1. var name = nullableString ?? "DefaultName"; // 如果 nullableString 为 null,使用 DefaultNa
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表