System.ComponentModel.ScriptExpression.MethodCallExpression.GetValue C# (CSharp) Method

GetValue() public method

public GetValue ( IScriptExpressionNameResolver nameResolver ) : object
nameResolver IScriptExpressionNameResolver
return object
            public object GetValue(IScriptExpressionNameResolver nameResolver)
            {
                object value = null;

                BindingFlags flags = BindingFlags.FlattenHierarchy |
                                     BindingFlags.Public |
                                     BindingFlags.Instance;

                object obj = nameResolver.ResolveName(_parts[0]);

                for (int i = 1; i < _parts.Length; i++) {
                    if (i == _parts.Length - 1) {
                        MethodInfo mi = obj.GetType().GetMethod(_parts[i], flags);
                        if (mi == null) {
                            throw new InvalidOperationException("Unknown method '" + _parts[i] + "'");
                        }

                        object[] paramValues = null;

                        if (_parameters != null) {
                            ParameterInfo[] paramInfos = mi.GetParameters();
                            if (_parameters.Count != paramInfos.Length) {
                                throw new InvalidOperationException("Parameter count mismatch for method '" + _parts[i] + "'");
                            }

                            paramValues = new object[_parameters.Count];

                            for (int j = 0; j < paramValues.Length; j++) {
                                object paramValue = _parameters[j].GetValue(nameResolver);
                                if ((paramValue == null) || (paramInfos[j].ParameterType.IsAssignableFrom(paramValue.GetType()) == false)) {
                                    paramValue = Convert.ChangeType(paramValue, paramInfos[j].ParameterType, CultureInfo.CurrentCulture);
                                }

                                paramValues[j] = paramValue;
                            }
                        }

                        value = mi.Invoke(obj, paramValues);
                    }
                    else {
                        PropertyInfo pi = obj.GetType().GetProperty(_parts[i], flags);
                        if (pi != null) {
                            obj = pi.GetValue(obj, null);
                        }
                        else {
                            throw new InvalidOperationException("Unknown property '" + _parts[i] + "'");
                        }
                    }
                }

                return value;
            }
ScriptExpression.MethodCallExpression