Is there a generic collection that I can access the elements through the indexer by string key and by index?
<p>I want to declare a generic collection of objects and be able to access them through the indexer either by a key string value or by index. How do I do this? Is there is an out of the box .Net class that doesn't require sub-classing?</p>

<pre><code>class Program
{

    static void Main(string[] args)
    {

        System.Collections.Generic.WhatKindOfCollection&lt;PageTab&gt; myPageTabs 
            = new System.Collections.Generic.WhatKindOfCollection&lt;PageTab&gt;();

        PageTab pageTab1 = new PageTab();
        pageTab1.ID = "tab1";
        myPageTabs.Add(pageTab1);

        myPageTabs.Add(new PageTab("tab2"));

        myPageTabs[0].label = "First Tab";
        myPageTabs["tab2"].label = "Second Tab";

    }

    public class PageTab
    {
        public PageTab(string id)
        {
            this.ID = id;
        }

        public PageTab() { }


        //Can I define ID to get the key property by default?
        public string ID { get; set; }

        public string label { get; set; }
        public bool visible { get; set; }
    }
}
</code></pre>
