private double Number(XPathNodeIterator nodeIterator)
{
if (arg == null)
{
return(XmlConvertEx.ToXPathDouble(nodeIterator.Current.Value));
}
object argVal = arg.Evaluate(nodeIterator);
switch (GetXPathType(argVal))
{
case XPathResultType.NodeSet:
XPathNavigator value = arg.Advance();
if (value != null)
{
return(Number(value.Value));
}
break;
case XPathResultType.String:
return(Number((string)argVal));
case XPathResultType.Boolean:
return(Number((bool)argVal));
case XPathResultType.Number:
return((double)argVal);
case XPathResultType_Navigator:
return(Number(((XPathNavigator)argVal).Value));
}
return(double.NaN);
}