private static IEnumerator <TElement> GetEnumeratorImpl(SharedHandle <List <TElement> > handle)
 {
     using (handle)
     {
         foreach (var item in handle.GetTarget())
         {
             yield return(item);
         }
     }
 }
        /// <summary>
        /// Create new collection of objects which are to be disposed and populates it with objects returned by given iterator.
        /// </summary>
        /// <param name="objs"></param>
        public DisposableEnumerable(IEnumerable <TElement> objs)
        {
            var objectsToDispose = new List <TElement>(objs);

            objectsToDisposeHandle = SharedHandle.NewHandle(objectsToDispose, DisposeElements);
        }