Types de données : XPath/XQuery en .NET
Lorsqu'une fonction d'extension .NET est utilisée dans une expression XPath/XQuery, les types de données des arguments de la fonction sont importants pour déterminer laquelle des méthodes .NET multiples possédant le même nom est appelée.
Dans .NET, les règles suivantes sont suivies :
•S'il y a plus d'une méthode portant le même nom dans une classe, les méthodes disponibles pour la sélection sont réduites à celles qui ont le même nombre d'arguments que l'appel de fonction.
•Les types de données chaîne, nombre et booléen XPath/XQuery (voir la liste ci-dessous) sont convertis implicitement en un type de données .NET correspondant. Si le type XPath/XQuery fourni peut être converti en plus d'un type .NET (par exemple, xs:integer), puis, ce type .NET est sélectionné ce qui est déclaré pour la méthode sélectionnée. Par exemple, si la méthode .NET appelée est fx(double) et que le type de données fourni XPath/XQuery est xs:integer, alors xs:integer sera converti dans le type de données double de .NET.
La table ci-dessous recense les conversions implicites des types chaîne, nombre et booléen XPath/XQuery en types de données .NET.
xs:string | StringValue, string |
xs:boolean | BooleanValue, bool |
xs:integer | IntegerValue, decimal, long, integer, short, byte, double, float |
xs:float | FloatValue, float, double |
xs:double | DoubleValue, double |
xs:decimal | DecimalValue, decimal, double, float |
Les sous-types des types de données de XML Schema recensés ci-dessus (et qui sont utilisés dans XPath et Query) seront aussi convertis dans le/s type/s .NET correspondant au type ancêtre du sous-type.
Dans certains cas, il peut ne pas être possible de sélectionner la méthode .NET correcte sur la base des informations fournies. Veuillez considérer le cas suivant, par exemple.
•L'argument fourni est une valeur xs:untypedAtomic de 10 et est prévue pour la méthode mymethod(float).
•Néanmoins, il y a une autre méthode dans la classe qui prend un argument d'un autre type de données : mymethod(double).
•Puisque les noms de la méthode et le type fourni (xs:untypedAtomic) ont pu être convertis correctement en float ou double, il est possible que xs:untypedAtomic soit converti en double au lieu de float.
•Par conséquence, la méthode sélectionnée ne sera pas celle requise et peut ne pas produire le résultat attendu. Pour contourner ce problème, vous pouvez créer une méthode définie par l'utilisateur avec un nom différent et utiliser cette méthode.
Les types qui ne sont pas couverts dans la liste ci-dessus (par exemple xs:date) ne seront pas convertis et généreront une erreur.