Пример #1
0
        private object Invoke(object target, Flow flow)
        {
            if (useExpandedParameters)
            {
                switch (inputParameters.Count)
                {
                case 0:

                    return(member.Invoke(target));

                case 1:

                    return(member.Invoke(target,
                                         flow.GetConvertedValue(inputParameters[0])));

                case 2:

                    return(member.Invoke(target,
                                         flow.GetConvertedValue(inputParameters[0]),
                                         flow.GetConvertedValue(inputParameters[1])));

                case 3:

                    return(member.Invoke(target,
                                         flow.GetConvertedValue(inputParameters[0]),
                                         flow.GetConvertedValue(inputParameters[1]),
                                         flow.GetConvertedValue(inputParameters[2])));

                case 4:

                    return(member.Invoke(target,
                                         flow.GetConvertedValue(inputParameters[0]),
                                         flow.GetConvertedValue(inputParameters[1]),
                                         flow.GetConvertedValue(inputParameters[2]),
                                         flow.GetConvertedValue(inputParameters[3])));

                case 5:

                    return(member.Invoke(target,
                                         flow.GetConvertedValue(inputParameters[0]),
                                         flow.GetConvertedValue(inputParameters[1]),
                                         flow.GetConvertedValue(inputParameters[2]),
                                         flow.GetConvertedValue(inputParameters[3]),
                                         flow.GetConvertedValue(inputParameters[4])));

                default:

                    throw new NotSupportedException();
                }
            }
            else
            {
                var arguments = new object[parameterCount];

                for (int parameterIndex = 0; parameterIndex < parameterCount; parameterIndex++)
                {
                    if (inputParameters.TryGetValue(parameterIndex, out var inputParameter))
                    {
                        arguments[parameterIndex] = flow.GetConvertedValue(inputParameter);
                    }
                }

                var result = member.Invoke(target, arguments);

                for (int parameterIndex = 0; parameterIndex < parameterCount; parameterIndex++)
                {
                    if (outputParameters.TryGetValue(parameterIndex, out var outputParameter))
                    {
                        flow.SetValue(outputParameter, arguments[parameterIndex]);
                    }
                }

                return(result);
            }
        }