private static void ValidateOpAssignConversionLambda(LambdaExpression conversion, Expression left, MethodInfo method, ExpressionType nodeType)
{
Type delegateType = conversion.Type;
Debug.Assert(typeof(System.MulticastDelegate).IsAssignableFrom(delegateType) && delegateType != typeof(System.MulticastDelegate));
MethodInfo mi = delegateType.GetMethod("Invoke");
ParameterInfo[] pms = mi.GetParametersCached();
Debug.Assert(pms.Length == conversion.ParameterCount);
if (pms.Length != 1)
{
throw Error.IncorrectNumberOfMethodCallArguments(conversion, nameof(conversion));
}
if (!TypeUtils.AreEquivalent(mi.ReturnType, left.Type))
{
throw Error.OperandTypesDoNotMatchParameters(nodeType, conversion.ToString());
}
if (method != null)
{
// The parameter type of conversion lambda must be the same as the return type of the overload method
if (!TypeUtils.AreEquivalent(pms[0].ParameterType, method.ReturnType))
{
throw Error.OverloadOperatorTypeDoesNotMatchConversionType(nodeType, conversion.ToString());
}
}
}