XPathNavigator.Evaluate(string) return 可以为空吗?

Can XPathNavigator.Evaluate(string) return null?

XPathNavigator.Evaluate return 的这个重载可以为 null 吗?

// Can "result" be null ?

object result = xmlDoc.CreateNavigator().Evaluate(xpathString);

如果答案是否定的,那么为什么 Resharper 说 result 可能为空?

string str = result.ToString();    // Resharper: Possible NullReferenceException

我在文档中没有发现任何可能导致输入为 return null 的输入。我也尝试检查 Reference Source for this function,但没有结果。

我知道 R# uses code annotations,但我仍然不相信这个警告,因为我尝试了不同的输入 none,其中 return 为空。

查看代码,看起来从 XPathNavigator.Evaluate 获得 null 的可能性很小。有几个可能的代码路径 可能 给你一个 null,但我怀疑它们是病态的边缘情况(如果评估一个应该是数字函数的函数,但不是,或者如果查询的操作数已经是 null)。我怀疑这些在正常情况下会发生。

我不知道为什么 ReSharper 在 return 值上有 [CanBeNull] 注释。如果非要我猜的话,我会说这是因为该方法是虚拟的,因此无法保证实现总是 return 一个值。或者因为它在另一个没有任何空性保证的 class 上调用抽象方法,并且没有检查该值的 return,所以再一次,不能保证它不会'不会是 null.

注释基于静态控制流分析,只能到此为止。 ReSharper 将提供它所能提供的最强提示。如果它知道它不是 null,它将对其进行注释,如果它不知道,它将对其进行标记 [CanBeNull],并谨慎行事。