Considérez le MyDecimal
classe ci-dessous. Sur C#
nous pouvons le convertir en un nombre entier grâce à la fonction implicite decimal
opérateur :
int i = (int)new MyDecimal(123m);
Comment produire le code équivalent dans un arbre d'expression ?
Lorsque vous utilisez Expression.Convertir ( .NET 4.5.1
), il échoue immédiatement avec No coercion operator is defined between types 'System.Int32' and 'MyDecimal'
. Il semble ne prendre en compte que les opérateurs de cast implicites.
try
{
var param = Expression.Parameter(typeof(int), null);
var convert = Expression.Convert(param, typeof(MyDecimal));
}
catch (Exception ex)
{
}
MyDecimal
classe :
public class MyDecimal
{
private readonly decimal value;
public MyDecimal(decimal value)
{
this.value = value;
}
public static implicit operator decimal(MyDecimal myDecimal)
{
return myDecimal.value;
}
public static implicit operator MyDecimal(decimal value)
{
return new MyDecimal(value);
}
}