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))); }