Collections Data Structure C#

using System;
using System.Collections;
class Program
{
    static void Main()
    {
        SimpleList test = new SimpleList();
        Console.WriteLine("Populate the List");
        test.Add("one");
        test.Add("two");
        test.Add("three");
        test.Add("four");
        test.Add("five");
        test.Add("six");
        test.Add("seven");
        test.Add("eight");
        test.PrintContents();
        // Remove elements from the list
        test.Remove("six");
        test.Remove("eight");
        test.PrintContents();
        // Add an element to the end of the list
        test.Add("nine");
        test.PrintContents();
        // Insert an element into the middle of the list
        test.Insert(4, "number");
        test.PrintContents();
        Console.WriteLine("List contains \"three\": {0}", test.Contains("three"));
        Console.WriteLine("List contains \"ten\": {0}", test.Contains("ten"));
    }
}
class SimpleList : IList
{
    private object[] _contents = new object[8];
    private int _count;
    public SimpleList()
    {
        _count = 0;
    }
    public int Add(object value)
    {
        if (_count < _contents.Length)
        {
            _contents[_count] = value;
            _count++;
            return (_count - 1);
        }
        else
        {
            return -1;
        }
    }
    public void Clear()
    {
        _count = 0;
    }
    public bool Contains(object value)
    {
        bool inList = false;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                inList = true;
                break;
            }
        }
        return inList;
    }
    public int IndexOf(object value)
    {
        int itemIndex = -1;
        for (int i = 0; i < Count; i++)
        {
            if (_contents[i] == value)
            {
                itemIndex = i;
                break;
            }
        }
        return itemIndex;
    }
    public void Insert(int index, object value)
    {
        if ((_count + 1 <= _contents.Length) && (index < Count) && (index >= 0))
        {
            _count++;
            for (int i = Count - 1; i > index; i--)
            {
                _contents[i] = _contents[i - 1];
            }
            _contents[index] = value;
        }
    }
    public bool IsFixedSize
    {
        get
        {
            return true;
        }
    }
    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }
    public void Remove(object value)
    {
        RemoveAt(IndexOf(value));
    }
    public void RemoveAt(int index)
    {
        if ((index >= 0) && (index < Count))
        {
            for (int i = index; i < Count - 1; i++)
            {
                _contents[i] = _contents[i + 1];
            }
            _count--;
        }
    }
    public object this[int index]
    {
        get
        {
            return _contents[index];
        }
        set
        {
            _contents[index] = value;
        }
    }
    public void CopyTo(Array array, int index)
    {
        int j = index;
        for (int i = 0; i < Count; i++)
        {
            array.SetValue(_contents[i], j);
            j++;
        }
    }
    public int Count
    {
        get
        {
            return _count;
        }
    }
    public bool IsSynchronized
    {
        get
        {
            return false;
        }
    }
    public object SyncRoot
    {
        get
        {
            return this;
        }
    }
    public IEnumerator GetEnumerator()
    {
        throw new Exception("The method or operation is not implemented.");
    }
    public void PrintContents()
    {
        Console.WriteLine("List has a capacity of {0} and currently has {1} elements.", _contents.Length, _count);
        Console.Write("List contents:");
        for (int i = 0; i < Count; i++)
        {
            Console.Write(" {0}", _contents[i]);
        }
        Console.WriteLine();
    }
}