我正在阅读 C# 8 中称为可为空引用类型的新功能的描述。该描述讨论了所谓的 null-forgiving 运算符。描述中的示例谈到了引用类型实例的取消引用(我认为是这样):
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-forgiving
当您明确知道表达式不能为 null 但编译器无法识别时,您也可以使用 null-forgiving 运算符。在以下示例中,如果 IsValid 方法返回 true,则其参数不为 null,您可以安全地取消引用它:
Run Code Online (Sandbox Code Playgroud)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 代码生成以下警告:警告 CS8602:取消引用可能为空值的引用。
我的印象是,在 C# 中取消引用对象意味着将其设置为 null。但看起来 Microsoft 将访问对象的属性称为取消引用该对象。
问题是:当我们谈论引用类型实例而不是托管和非托管指针时,C# 中的解引用术语是什么意思。