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, тип))); }
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); }
public object MethodInfo_Invoke(object методИнфо, object объект, params object[] argsOrig) { object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig); var mf = (MethodInfo)(((AutoWrap)методИнфо).O); return(AutoWrap.ОбернутьОбъект(mf.Invoke(ПолучитьРеальныйОбъект(объект), args))); }
public object СоздатьОбъект(object тип, params object[] argOrig) { var res = ТипДляСоздатьОбъект(тип); object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig); return(AutoWrap.ОбернутьОбъект(System.Activator.CreateInstance(res, args))); }
// Получаем масив элементов определенного типа // Тип выводится по первому элементу с индексом 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); } }
public object ВыполнитьДелегат(object делегат, params object[] argsOrig) { Delegate obj = (Delegate)ПолучитьРеальныйОбъект(делегат); object[] args = AutoWrap.ПолучитьМассивРеальныхОбъектов(argsOrig); return(AutoWrap.ОбернутьОбъект(obj.DynamicInvoke(args))); }
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)); }
// Получаем массив объектов используя эффект получения массива параметров при использовании // ключевого слова params // Пример использования //МассивПараметров=ъ(Врап.Массив(doc.ПолучитьСсылку(), "a[title='The Big Bang Theory']")); public object Массив(params object[] argOrig) { argOrig = AutoWrap.ПолучитьМассивРеальныхОбъектов(argOrig); return(AutoWrap.ОбернутьОбъект(argOrig)); }