private static LambdaExpression CreateLambdaExpression(Expression body, ParameterExpression[] parameterExpressions) { var types = new Type[parameterExpressions.Length + 1]; if (parameterExpressions.Length > 0) { var set = new HashSet <ParameterExpression>(); for (int index = 0; index < parameterExpressions.Length; ++index) { ParameterExpression parameterExpression = parameterExpressions[index]; types[index] = !parameterExpression.IsByRef ? parameterExpression.Type : parameterExpression.Type.MakeByRefType(); if (set.Contains(parameterExpression)) { throw BindingExtensions.DuplicateLambdaParameter(parameterExpression.ToString()); } set.Add(parameterExpression); } } types[parameterExpressions.Length] = body.Type; Type delegateType = Expression.GetDelegateType(types); return(CreateLambdaExpressionByType(delegateType, body, parameterExpressions)); }