« DataGrid, AllowNew, Inhibiting display of append row | Main | reverse engineering event behaviors, StackTrace »

Compact strongly typed collection pattern, CollectionBase

[Serializable]

public class LinkCollection : CollectionBase {

      public LinkCollection() {}

      public LinkCollection(LinkCollection value) {this.AddRange(value);}

      public LinkCollection(Link[] value) {this.AddRange(value);}

      public Link this[int index] {get {return ((Link)(List[index]));} set {List[index] = value;}}

      public int Add(Link value) {return List.Add(value);}

      public void AddRange(Link[] value) {for (int i = 0; i < value.Length; i++) Add(value[i]);}

      public void AddRange(LinkCollection value) {for (int i = 0; i < value.Count; i++) Add(value[i]);}

      public bool Contains(Link value) {return List.Contains(value);}

      public void CopyTo(Link[] array, int index) {List.CopyTo(array, index);}

      public int IndexOf(Link value) {return List.IndexOf(value);}

      public void Insert(int index, Link value) {List.Insert(index, value);}

      public new LinkEnumerator GetEnumerator() {return new LinkEnumerator(this);}

      public void Remove(Link value) {List.Remove(value);}

      public class LinkEnumerator : object, IEnumerator {

            private IEnumerator e; private IEnumerable bc;

            public LinkEnumerator(LinkCollection c) {bc = c; e = bc.GetEnumerator();}

            public Link Current {get {return (Link)e.Current;}}

            public bool MoveNext() {return e.MoveNext();}

            public void Reset() {e.Reset();}

            object IEnumerator.Current {get {return e.Current;}}

            bool IEnumerator.MoveNext() {return e.MoveNext();}

            void IEnumerator.Reset() {e.Reset();}

      }

}

 

 

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)