小编Chr*_*hr.的帖子

在 VS2022、.NET 6、C# 10 中停止获取 CS8602 的最优雅方法

我在 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”,它就会找到它。因此,据我所知,我没有做错任何事,也没有冒犯编译器。

然而,警告确实存在,而且似乎是错误的,因此很烦人。我的两个问题是:

  1. 是编译器警告逻辑中的错误吗?
  2. 是否有更好的(意思是,简短的,不是多余的)方法来编写类似的代码来搜索与某个 XML 查询匹配的所有节点并处理它们而不生成警告?

我发现我可以添加“#pragma warning禁用CS8602”,但这感觉不是一个很好的解决方案。理想情况下,我想在其他情况下利用此警告,这些情况在我看来是合法的,与此不同。

.net c# visual-studio-2022

3
推荐指数
2
解决办法
4494
查看次数

标签 统计

.net ×1

c# ×1

visual-studio-2022 ×1