c# - 术语“取消引用”对象到底是什么意思?
问题描述
我正在阅读 C# 8 中称为可空引用类型的新功能的描述。该描述讨论了所谓的 null-forgiving 运算符。描述中的示例讨论了引用类型实例的取消引用(我认为是这样):
当您明确知道表达式不能为 null 但编译器无法识别时,您也可以使用 null-forgiving 运算符。在以下示例中,如果
IsValid
方法返回 true,则其参数不为 null,您可以安全地取消引用它:public static void Main() { Person? p = Find("John"); if (IsValid(p)) { Console.WriteLine($"Found {p!.Name}"); } } public static bool IsValid(Person? person) { return person != null && !string.IsNullOrEmpty(person.Name); }
p.Name
如果没有 null-forgiving 运算符,编译器会为代码生成以下警告: 警告CS8602
:取消引用可能为 null 的引用。
我的印象是,在 C# 中取消引用一个对象意味着将其设置为 null。但看起来微软将访问对象的属性称为取消引用该对象。
问题是:当我们谈论引用类型实例而不是托管和非托管指针时,C# 中的取消引用术语是什么意思。
解决方案
取消引用意味着遵循引用来访问实际的底层对象。如果引用是null
,这会导致一个大问题。
推荐阅读
- android - 如何检查我的 android 设备中正在运行的作业?
- c++ - 将网络摄像头中的帧捕获为位图 - VFW - WINAPI
- java - 基于少数变量的对象组列表
- android - Android Studio 模拟器打开但屏幕是黑色的
- amazon-web-services - ElasticBeanstalk 无法使用没有解释的模块构建 Go 应用程序
- python - 在 Ursina 引擎中动画装配模型
- wpf - WPF ListView 到 Datagrid 中读取一个可观察的字典可能吗?
- google-sheets - 使用数组公式对每一行输入单行查询
- reactjs - 无法使用 material-ui (mui-v5) 和 reactjs 使菜单宽度与容器宽度相同
- c++ - c ++将文件转换为字符串