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++; } }