Пример #1
0
        public object Or(params object[] параметры1)
        {
            if (параметры1.Length == 0)
            {
                return(null);
            }

            object[] параметры = AutoWrap.ПолучитьМассивРеальныхОбъектов(параметры1);
            var      парам     = параметры[0];
            var      тип       = парам.GetType();

            long res = (long)Convert.ChangeType(парам, typeof(long));

            for (int i = 1; i < параметры.Length; i++)
            {
                res |= (long)Convert.ChangeType(параметры[i], typeof(long));
            }


            if (тип.IsEnum)
            {
                var ТипЗначений = Enum.GetUnderlyingType(тип);
                var number      = Convert.ChangeType(res, ТипЗначений);
                return(AutoWrap.ОбернутьОбъект(Enum.ToObject(тип, number)));
            }

            return(AutoWrap.ОбернутьОбъект(Convert.ChangeType(res, тип)));
        }
Пример #2
0
        public object ВыполнитьМетод(object objOrig, string имяМетода, params object[] argsOrig)
        {
            object res;
            object obj = objOrig;

            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig);
            if (obj is AutoWrap Объект)
            {
                obj = Объект.O;

                if (Объект.ЭтоТип)
                {
                    res = AutoWrap.ОбернутьОбъект(Объект.T.InvokeMember(имяМетода, BindingFlags.DeclaredOnly |
                                                                        BindingFlags.Public | BindingFlags.NonPublic |
                                                                        BindingFlags.Static | BindingFlags.InvokeMethod, null, null, args));

                    AutoWrap.УстановитьИзмененияВМассиве(argsOrig, args);

                    return(res);
                }
            }

            Type T = obj.GetType();

            res = AutoWrap.ОбернутьОбъект(T.InvokeMember(имяМетода, BindingFlags.DeclaredOnly |
                                                         BindingFlags.Public | BindingFlags.NonPublic |
                                                         BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, args));

            AutoWrap.УстановитьИзмененияВМассиве(argsOrig, args);
            return(res);
        }
Пример #3
0
        public object MethodInfo_Invoke(object методИнфо, object объект, params object[] argsOrig)
        {
            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig);
            var      mf   = (MethodInfo)(((AutoWrap)методИнфо).O);

            return(AutoWrap.ОбернутьОбъект(mf.Invoke(ПолучитьРеальныйОбъект(объект), args)));
        }
Пример #4
0
        public object СоздатьОбъект(object тип, params object[] argOrig)
        {
            var res = ТипДляСоздатьОбъект(тип);

            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig);
            return(AutoWrap.ОбернутьОбъект(System.Activator.CreateInstance(res, args)));
        }
Пример #5
0
        // Получаем масив элементов определенного типа
        // Тип выводится по первому элементу с индексом 0
        // Пример использования
        // ТипыПараметров=ъ(Врап.ТипМассив(IParentNode.ПолучитьСсылку(),String.ПолучитьСсылку()));
        public object ТипМассив(params object[] argOrig)
        {
            if (!(argOrig != null && argOrig.Length > 0))
            {
                return(new object[0]);
            }

            argOrig = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig);
            var Тип     = argOrig[0].GetType();
            var ti      = Тип.GetTypeInfo();
            var TypeRes = typeof(List <>).MakeGenericType(Тип);

            var res = System.Activator.CreateInstance(TypeRes);
            var mi  = TypeRes.GetTypeInfo().GetMethod("Add");
            var mi2 = TypeRes.GetTypeInfo().GetMethod("ToArray");

            foreach (var str in argOrig)
            {
                if (mi != null && str != null && ti.IsInstanceOfType(str))
                {
                    mi.Invoke(res, new[] { str });
                }
            }

            if (mi2 != null)
            {
                return(AutoWrap.ОбернутьОбъект(mi2.Invoke(res, new object[0])));
            }
            else
            {
                return(null);
            }
        }
Пример #6
0
        public object ВыполнитьДелегат(object делегат, params object[] argsOrig)
        {
            Delegate obj = (Delegate)ПолучитьРеальныйОбъект(делегат);

            object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig);

            return(AutoWrap.ОбернутьОбъект(obj.DynamicInvoke(args)));
        }
Пример #7
0
        public object СоздатьДелегат(object типДелегата, object методИнфо, Object oбъект, params object[] argOrig)
        {
            object     объект          = AutoWrap.ПолучитьРеальныйОбъект(oбъект);
            MethodInfo объектМетодИнфо = (MethodInfo)AutoWrap.ПолучитьРеальныйОбъект(методИнфо);
            Type       genType         = (Type)AutoWrap.ПолучитьРеальныйОбъект(типДелегата);
            var        типы            = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig).Cast <Type>().ToArray();
            Type       constructed     = genType.MakeGenericType(типы);

            var res = Delegate.CreateDelegate(constructed, объект, объектМетодИнфо);

            return(new AutoWrap(res));
        }
Пример #8
0
 // Получаем массив объектов используя эффект получения массива параметров при использовании
 // ключевого слова params
 // Пример использования
 //МассивПараметров=ъ(Врап.Массив(doc.ПолучитьСсылку(), "a[title='The Big Bang Theory']"));
 public object Массив(params object[] argOrig)
 {
     argOrig = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig);
     return(AutoWrap.ОбернутьОбъект(argOrig));
 }