Mega Code Archive

 
Categories / C# / Collections Data Structure
 

Lazy List

//New BSD License (BSD) //http://bluecms.codeplex.com/license using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace BlueCMS.Core.Helpers {     public class LazyList<T> : IList<T>     {         public LazyList()         {             inner = new List<T>();         }         public LazyList(IQueryable<T> query)         {             this.query = query;         }         private IQueryable<T> query;         private IList<T> inner;         public int IndexOf(T item)         {             return Inner.IndexOf(item);         }         public void Insert(int index, T item)         {             Inner.Insert(index, item);         }         public void RemoveAt(int index)         {             Inner.RemoveAt(index);         }         public T this[int index]         {             get { return Inner[index]; }             set { Inner[index] = value; }         }         public void Add(T item)         {             inner = inner ?? new List<T>();             Inner.Add(item);         }         public void Add(object ob)         {             throw new NotImplementedException("This is for serialization");         }         public void Clear()         {             if (inner != null)                 Inner.Clear();         }         public bool Contains(T item)         {             return Inner.Contains(item);         }         public void CopyTo(T[] array, int arrayIndex)         {             Inner.CopyTo(array, arrayIndex);         }         public bool Remove(T item)         {             return Inner.Remove(item);         }         public int Count         {             get { return Inner.Count; }         }         public bool IsReadOnly         {             get { return Inner.IsReadOnly; }         }         IEnumerator<T> IEnumerable<T>.GetEnumerator()         {             return Inner.GetEnumerator();         }         public IEnumerator GetEnumerator()         {             return ((IEnumerable)Inner).GetEnumerator();         }         public IList<T> Inner         {             get             {                 if (inner == null)                     inner = query.ToList();                 return inner;             }         }     } }