Esempio n. 1
0
 void Fetch(int maxIndex)
 {
     if (elements == null)
     {
         elements = new List <ObjectValue> ();
         values   = new List <object> ();
         try {
             enumerator     = ctx.Adapter.RuntimeInvoke(ctx, objType, obj, "GetEnumerator", new object[0], new object[0]);
             enumeratorType = ctx.Adapter.GetImplementedInterfaces(ctx, ctx.Adapter.GetValueType(ctx, enumerator))
                              .First(f => ctx.Adapter.GetTypeName(ctx, f) == "System.Collections.IEnumerator");
         }
         catch (EvaluatorExceptionThrownException e) {
             elements.Add(ObjectValue.CreateEvaluationException(ctx, this, new ObjectPath("Exception"), e));
             return;
         }
     }
     while (maxIndex > elements.Count && MoveNext())
     {
         var valCurrent = ctx.Adapter.GetMember(ctx, null, enumeratorType, enumerator, "Current");
         var val        = valCurrent.Value;
         values.Add(val);
         if (val != null)
         {
             elements.Add(ctx.Adapter.CreateObjectValue(ctx, valCurrent, new ObjectPath("[" + currentIndex + "]"), val, ObjectValueFlags.ReadOnly));
         }
         else
         {
             elements.Add(ObjectValue.CreateNullObject(this, "[" + currentIndex + "]", ctx.Adapter.GetDisplayTypeName(ctx.Adapter.GetTypeName(ctx, valCurrent.Type)), ObjectValueFlags.ReadOnly));
         }
         currentIndex++;
     }
 }