XPathNavigator.Evaluate(string)可以返回null吗?

本文关键字:返回 null Evaluate string XPathNavigator | 更新日期: 2023-09-27 18:02:44

XPathNavigator.Evaluate的重载是否返回null ?

// Can "result" be null ?
object result = xmlDoc.CreateNavigator().Evaluate(xpathString);

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

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

我在文档中没有发现任何可能导致它返回null的输入。我还尝试检查这个函数的参考源代码,但是没有结果。

我知道r#使用代码注释,但我仍然不相信这个警告,因为我尝试了不同的输入,没有一个返回null。

XPathNavigator.Evaluate(string)可以返回null吗?

查看代码,看起来确实不太可能从XPathNavigator.Evaluate中获得null。有几个可能的代码路径可能会让您获得null,但我怀疑它们是病态的边缘情况(如果计算应该是数字函数的函数,但不是,或者查询的操作数已经是null)。我怀疑这些在正常情况下不会发生。

我不知道为什么ReSharper在返回值上有[CanBeNull]注释。如果要我猜的话,我会说这是因为方法是虚的,因此无法保证实现总是返回一个值。或者因为它调用了另一个类上的抽象方法,而这个类没有任何null保证,也没有对返回值进行检查,所以,也不能保证它不是null

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