public static BinaryExpression MakeBinaryWithOperandConversion (
ExpressionType expressionType,
Expression left,
Expression right,
bool isLiftedToNull,
MethodInfo methodInfo)
{
ArgumentUtility.CheckNotNull ("left", left);
ArgumentUtility.CheckNotNull ("right", right);
if (NeedsConversion (expressionType, left, right))
{
if (left.Type.IsAssignableFrom (right.Type))
right = Expression.Convert (right, left.Type);
else if (right.Type.IsAssignableFrom (left.Type))
left = Expression.Convert (left, right.Type);
else
{
left = Expression.Convert (left, typeof (object));
right = Expression.Convert (right, typeof (object));
}
}
return Expression.MakeBinary (expressionType, left, right, isLiftedToNull, methodInfo);
}