En F # J'ai une fonction qui retourne les instances de System.Linq.Expression:type F # retour contrainte
and System.Object with
member this.ToExpression() =
match this with
| :? System.Int32 -> Expression.Constant(this) :> Expression
| :? System.Boolean -> Expression.Constant(this) :> Expression
| :? Tml.Runtime.Seq as s -> s.ToExpression()
| _ -> failwith "bad expression"
Si j'omettez le type coercitions sur le retour des valeurs F # déduira le type de retour de la fonction à ConstantExpression . Ma première pensée était de marquer explicitement le type de retour comme étant: #Expression, mais cela n'a pas fonctionné. Existe-t-il une manière plus élégante de faire cela qui n'implique pas de lancer manuellement les types de retour au type le plus générique?
Merci.
Edit: Merci à vous tous pour les réponses. Je vais aller avec le type de retour explicite + scénario upcast.