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]
,并谨慎行事。
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]
,并谨慎行事。