Пример #1
0
        public int Next(int celt, object[] rgVar, IntPtr pceltFetched)
        {
            if (celt == 1 && _enumerator.MoveNext())
            {
                var      current = _enumerator.Current;
                AutoWrap res     = null;
                if (!((current == null) || !_type.IsAssignableFrom(current.GetType())))
                {
                    res = new AutoWrap(current, _type);
                    ДанныеДляТипа.ПрописатьПоля(res, _данныеДляТипа);
                }

                rgVar[0] = res;
                if (pceltFetched != IntPtr.Zero)
                {
                    Marshal.WriteInt32(pceltFetched, 1);
                }

                return(SOk);
            }
            else
            {
                return(SFalse);
            }
        }
 internal static void ПрописатьПоля(AutoWrap объект, ДанныеДляТипа res)
 {
     объект.Поля     = res._поля;
     объект.Мемберы  = res._мемберы;
     объект.Методы   = res._методы;
     объект.Свойства = res._свойства;
 }
Пример #3
0
        public ТипизированныйЭнумератор(System.Collections.IEnumerator enumerator, Type тип)
        {
            this._enumerator = enumerator;
            _type            = тип;


            _данныеДляТипа = ДанныеДляТипа.ПолучитьДанныеДляТипа(_type);
        }
        internal static ДанныеДляТипа ПолучитьДанныеДляТипа(Type T)
        {
            if (!СловарьТипов.TryGetValue(T, out var res))
            {
                res = new ДанныеДляТипа(T);
                СловарьТипов.Add(T, res);
            }

            return(res);
        }
        internal static void Инициализировать(AutoWrap объект)
        {
            if (объект.ЭтоТип || объект.ЭтоExpandoObject)
            {
                return;
            }

            ДанныеДляТипа res = ПолучитьДанныеДляТипа(объект.T);

            ПрописатьПоля(объект, res);
        }