我在 VS 2022、C# .NET 6.0 中有以下示例代码:
using System.Xml;
XmlDocument doc = new XmlDocument();
doc.LoadXml("<root/>");
foreach (XmlNode node in doc.SelectNodes("aaa"))
Console.WriteLine(node.OuterXml);
Run Code Online (Sandbox Code Playgroud)
并在 doc.SelectNodes 行收到“CS8602:取消引用可能为空的引用”。该代码的工作原理是,它不会失败,而是在找不到名为“aaa”的节点时不执行任何操作。如果我输入“root”,它就会找到它。因此,据我所知,我没有做错任何事,也没有冒犯编译器。
然而,警告确实存在,而且似乎是错误的,因此很烦人。我的两个问题是:
我发现我可以添加“#pragma warning禁用CS8602”,但这感觉不是一个很好的解决方案。理想情况下,我想在其他情况下利用此警告,这些情况在我看来是合法的,与此不同。