This bag implementation stores items in a linked list. It is almost identical to the stack implementation without the Pop operation:

using System;
using System.Collections;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Bag bag = new Bag();

            string input = "A C D B G F";

            foreach (string item in input.Split(" ".ToCharArray()))
            {
                bag.Add(item);
            }

            foreach (string s in bag)
                Console.Write(s + " "); // F G B D C A
            Console.ReadKey();
        }

        class Bag where T : class
        {
            private Node first;
            private int N; // the number of items in the bag

            public bool IsEmpty { get { return first == null; } } // the same as N == 0
            public int Size { get { return N; } }

            // Add the item at the beginning of the linked list.
            // This effectively reverses the order of elements
            // although the order for a bag collection is not relevant.
            public void Add(T item)
            {
                // The same as Push in the Stack class.
                Node oldFirst = first;
                first = new Node();
                first.Item = item;
                first.Next = oldFirst;

                ++N;
            }

            // We need an iterator as there is no other method to access the bag elements.
            public IEnumerator GetEnumerator()
            {
                for (Node n = first; n != null; n = n.Next)
                {
                    yield return n.Item;
                }
            }

            private class Node
            {
                public T Item { get; set; }
                public Node Next { get; set; }

                public override string ToString() { return (Item == null ? "null" : Item.ToString()); }
            }
        }
    }
}