private List <T> ProcessArray <T>(IEnumerable <Value> list, List <T> array)
        {
            List <T> elements = array;

            if (elements == null)
            {
                elements = new List <T>();
            }
            elements.Clear();
            int pos = 0;

            foreach (Value value in list)
            {
                object obj          = value.Item;
                var    datum        = obj as DatumType;
                var    collection   = obj as Collection;
                var    indexedArray = obj as IndexedArrayType;
                var    dae          = Activator.CreateInstance <T>();
                if (datum != null)
                {
                    if (dae is DatumType)
                    {
                        datum.CopyTo(dae as DatumType);
                    }
                    PropertyInfo piValue = dae.GetType().GetProperty("value");
                    if (piValue != null)
                    {
                        piValue.SetValue(dae, Datum.GetDatumValue(datum), null);
                    }
                }

                PropertyInfo piPos = dae.GetType().GetProperty("position");
                if (piPos != null)
                {
                    piPos.SetValue(dae, "[" + pos++ + "]", null);
                }
                elements.Add(dae);
            }
            return(elements);
        }