Collections Data Structure C#

using System;
using System.Collections;
using System.Collections.Specialized;
public class MyCollection : NameObjectCollectionBase  {
   private DictionaryEntry _de = new DictionaryEntry();
   public DictionaryEntry this[ int index ]  {
      get  {
         _de.Key = this.BaseGetKey( index );
         _de.Value = this.BaseGet( index );
         return( _de );
      }
   }
   public MyCollection( IDictionary d )  {
      foreach ( DictionaryEntry de in d )  {
         this.BaseAdd( (String) de.Key, de.Value );
      }
   }
   public String[] AllKeys  {
      get  {
         return( this.BaseGetAllKeys() );
      }
   }
   public Array AllValues  {
      get  {
         return( this.BaseGetAllValues() );
      }
   }
   public String[] AllStringValues  {
      get  {
         return( (String[]) this.BaseGetAllValues( typeof(System.String) ) );
      }
   }
}
public class SamplesNameObjectCollectionBase  {
   public static void Main()  {
      IDictionary d = new ListDictionary();
      d.Add( "A", "a" );
      d.Add( "B", "b" );
      d.Add( "C", "c" );
      MyCollection myCol = new MyCollection( d );
      Console.WriteLine( "Initial state of the collection (Count = {0}):", myCol.Count );
      PrintKeysAndValues( myCol );
      foreach ( String s in myCol.AllKeys )  {
         Console.WriteLine( "   {0}", s );
      }
      foreach ( Object o in myCol.AllValues )  {
         Console.WriteLine( "   {0}", o.ToString() );
      }
      foreach ( String s in myCol.AllValues )  {
         Console.WriteLine( "   {0}", s );
      }
   }
   public static void PrintKeysAndValues( MyCollection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )  {
         Console.WriteLine( "[{0}] : {1}, {2}", i, myCol[i].Key, myCol[i].Value );
      }
   }
}