Exemple #1
0
        private Result EvalFunc(Evaluator evaluater, Result[] argArray)
        {
            if (argArray.Length < 2)
            {
                throw new ArgumentException();
            }
            if ((argArray[0] == null) || (argArray[1] == null))
            {
                throw new ArgumentNullException("argArray[0]");
            }
            object target = argArray[0].Value;

            if (target == null)
            {
                throw new ArgumentException();
            }
            string       name       = ConvertHelper.ToString(argArray[1].Value);
            Type         type       = null;
            BindingFlags invokeAttr = BindingFlags.Default;

            if (target is Type)
            {
                type       = (Type)target;
                target     = null;
                invokeAttr = BindingFlags.Static;
            }
            else
            {
                type       = target.GetType();
                invokeAttr = BindingFlags.Instance;
            }
            invokeAttr |= BindingFlags.OptionalParamBinding | BindingFlags.InvokeMethod | BindingFlags.Public;
            int num = argArray.Length - 2;

            object[] args = new object[num];
            for (int i = 0; i < num; i++)
            {
                args[i] = argArray[i + 2].Value;
            }
            Binder defaultBinder = Type.DefaultBinder;
            object obj3          = type.InvokeMember(name, invokeAttr, defaultBinder, target, args);

            if (obj3 != null)
            {
                return(new Result(obj3.GetType(), obj3));
            }
            return(new Result(null, null));
        }
        protected override Result DoEval(Evaluator evaluater, Result[] argArray)
        {
            Type type  = argArray[0].Type;
            Type type2 = argArray[1].Type;

            if ((type == null) && (type2 == null))
            {
                return(new Result(null, null));
            }
            if (type == typeof(string))
            {
                return(new Result(ConvertHelper.ToString(argArray[0].Value) + ConvertHelper.ToString(argArray[1].Value)));
            }
            double num = Convert.ToDouble(argArray[0].Value) + Convert.ToDouble(argArray[1].Value);

            return(new Result(type, ConvertHelper.ChangeType(num, type)));
        }