Yes, it is Conversion expression which represents boxing and not only boxing. It contains user defined conversions etc.
For example, If a type defines user defined conversions that will be convered using "Conversion expression". In this case weakTyped.Body.Method
will return the overloaded method something like op_Implicit...
You can prove this with following code.
public static void Test<TProperty>(Expression<Func<Model, TProperty>> strongTyped, Expression<Func<Model, object>> weakTyped)
{
var expr = (UnaryExpression)weakTyped.Body;
Console.WriteLine("Weak Typed method: {0}", expr.Method);
Console.WriteLine("Strong Typed: {0}", strongTyped);
Console.WriteLine("Weak Typed: {0}", weakTyped);
}
public static void TestFloat<TProperty>(Expression<Func<Model, TProperty>> strongTyped, Expression<Func<Model, decimal>> weakTyped)
{
var expr = (UnaryExpression) weakTyped.Body;
Console.WriteLine("Weak Typed method: {0}", expr.Method);
Console.WriteLine("Strong Typed: {0}", strongTyped);
Console.WriteLine("Weak Typed: {0}", weakTyped);
}
For decimal type this returns overloaded operator where as object
weakTyped.Body.Method
will be null since it is just a boxing conversion.