Axiom.Runtime.Builtins.OOP.set_property_3.Setproperty C# (CSharp) Метод

Setproperty() публичный Метод

public Setproperty ( AbstractTerm obj, AbstractTerm method, AbstractTerm objValue ) : bool
obj Axiom.Runtime.AbstractTerm
method Axiom.Runtime.AbstractTerm
objValue Axiom.Runtime.AbstractTerm
Результат bool
        public bool Setproperty(AbstractTerm obj, AbstractTerm method, AbstractTerm objValue)
        {
            if (obj.IsConstant)
            {
                // invoke a static method
                Assembly asm = GetRequiredAssembly(obj.Data() as string, runtime);
                Type type = asm.GetType(obj.Data() as string);
                if (type == null)
                {
                    return false;
                }

                ArrayList paramArray = new ArrayList();
                ParameterInfo par = type.GetMethod(method.Data() as string).GetParameters()[0];
                switch (par.GetType().ToString())
                {
                    case "System.Int32":
                        paramArray.Add(Int32.Parse(objValue.Data() as string));
                        break;
                    case "System.Char":
                        paramArray.Add(objValue.Data().ToString()[0]);
                        break;
                    case "System.String":
                        paramArray.Add(objValue.Data() as string);
                        break;
                    case "System.Boolean":
                        paramArray.Add(Boolean.Parse(objValue.Data() as string));
                        break;
                    default:	// pass Variable.Object
                        paramArray.Add(objValue);
                        break;
                }

                object res = type.InvokeMember(method.Data() as string, BindingFlags.Static | BindingFlags.Public | BindingFlags.SetProperty, null, obj, paramArray.ToArray());
                switch (res.GetType().ToString())
                {
                    case "System.Char":
                    case "System.String":
                    case "System.Int32":
                    case "System.Boolean":
                        objValue.Unify(new ConstantTerm(res.ToString()));
                        break;
                    default:
                        objValue.Unify(new ObjectTerm(res));
                        break;
                }
            }
            else
            {

                ArrayList paramArray = new ArrayList();
                Type t = obj.Data().GetType();
                PropertyInfo pInfo = t.GetProperty(method.Data() as string);

                if (pInfo == null)
                {
                    return false;
                }
                if (pInfo.CanWrite == false)
                {
                    return false;
                }

                switch (pInfo.PropertyType.ToString())
                {
                    case "System.Int32":
                        paramArray.Add(Int32.Parse(objValue.Data() as string));
                        break;
                    case "System.Char":
                        paramArray.Add(objValue.Data().ToString()[0]);
                        break;
                    case "System.String":
                        paramArray.Add(objValue.Data() as string);
                        break;
                    case "System.Boolean":
                        paramArray.Add(Boolean.Parse(objValue.Data() as string));
                        break;
                    default:	// pass Variable.Object
                        paramArray.Add(objValue);
                        break;
                }

                object res = obj.Data().GetType().InvokeMember(method.Data() as string, BindingFlags.Default | BindingFlags.ExactBinding | BindingFlags.SetProperty, null, obj.Data(), paramArray.ToArray());

            }
            return true;
        }