public override void Refresh()
        {
            if (m_isExpanded)
            {
                Obj = parent.Obj;

                if (variables == null)
                {
                    variables = PopList(Obj is ICollection ? ((ICollection)Obj).Count : 8);
                }

                if (Obj is IList)
                {
                    int count = ((IList)Obj).Count;

                    // Add new entries to variables if there aren't enough entries
                    for (int i = variables.Count; i < count; i++)
                    {
                        variables.Add(new DebugModeEntry(this)
                        {
                            Getter = new VariableGetterHolder(i + ":", new EnumerableValueGetter(this, i).GetValue)
                        });
                    }

                    // Remove excessive entries from variables
                    for (int i = variables.Count - 1; i >= count; i--)
                    {
                        variables[i].PoolLists();
                        variables.RemoveAt(i);
                    }
                }
                else
                {
                    int index = 0;
                    foreach (object element in (IEnumerable)Obj)
                    {
                        DebugModeEntry entry;
                        if (index < variables.Count)
                        {
                            entry = variables[index];
                        }
                        else
                        {
                            entry = new DebugModeEntry(this)
                            {
                                Getter = new VariableGetterHolder(index + ":", new EnumerableValueGetter(this, index).GetValue)
                            };
                            variables.Add(entry);
                        }

                        entry.Obj = element;
                        index++;
                    }

                    for (int i = variables.Count - 1; i >= index; i--)
                    {
                        variables[i].PoolLists();
                        variables.RemoveAt(i);
                    }
                }

                for (int i = 0; i < variables.Count; i++)
                {
                    variables[i].Refresh();
                }
            }
        }
 public DebugModeEntry(DebugModeEntry parent)
 {
     this.parent = parent;
 }
 public DebugModeEnumerableEntry(DebugModeEntry parent) : base(parent)
 {
 }