public virtual object BuildCollectionInstance(CollectionObjectInfo coi)
		{
            Type t = classPool.GetClass(coi.GetRealCollectionClassName());

            if(t.IsGenericType){
                return BuildGenericCollectionInstance(coi,t);
            }else{
                return BuildNonGenericCollectionInstance(coi,t);
            }
           
		}
		public virtual object BuildGenericCollectionInstance(CollectionObjectInfo coi, Type t)
		{
            Type genericType = t.GetGenericTypeDefinition();
            object newCollection = null;
            try
            {
                newCollection = System.Activator.CreateInstance(t);
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e);
                throw new ODBRuntimeException(NeoDatisError.CollectionInstanciationError.AddParameter(coi.GetRealCollectionClassName()));
            }
            System.Collections.IEnumerator iterator = coi.GetCollection().GetEnumerator();
            AbstractObjectInfo aoi = null;
            MethodInfo method = t.GetMethod("Add");
            while (iterator.MoveNext())
            {
                aoi = (AbstractObjectInfo)iterator.Current;
                if (!aoi.IsDeletedObject())
                {
                    method.Invoke(newCollection, new object[] { BuildOneInstance(aoi) });
                }
            }
            return newCollection;
           
		}
        public virtual object BuildNonGenericCollectionInstance(CollectionObjectInfo coi, Type t)
		{
            System.Collections.IList newCollection = (System.Collections.IList)System.Activator.CreateInstance(classPool.GetClass(coi.GetRealCollectionClassName()));
            System.Collections.IEnumerator iterator = coi.GetCollection().GetEnumerator();
            AbstractObjectInfo aoi = null;
            
            while (iterator.MoveNext())
            {
                aoi = (AbstractObjectInfo)iterator.Current;
                if (!aoi.IsDeletedObject())
                {
                    newCollection.Add(BuildOneInstance(aoi));
                }
            }
            return newCollection;
		}