コード例 #1
0
        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));
        }