Простите, а где у вас собственно создается T. Это генерик? Тогда ваш класс должен быть CStack<T>
По коду :
Метод POP - а где у вас удаляется элемент из списка? Или он продолжит там лежать? А если тип будет тяжеловесным?
Откуда у вас такая любовь к this?
Я бы еще заменил исключение на собственное - "Стек пуст". Вы бросаете InvalidOperationException без пояснений. Как я как клиент должен догадаться что произошло?
P.S. Стек это НЕ массив. Стек это связанный список с правилом обхода LIFO. Каждый объект должен иметь ссылку на следующий объект стека.