<p>I'm looking for a container that keeps all its items in order.  I looked at SortedList, but that requires a separate key, and does not allow duplicate keys.  I could also just use an unsorted container and explicitly sort it after each insert.</p>

<p>Usage:</p>

<ul>
<li>Occasional insert</li>
<li>Frequent traversal in order</li>
<li>Ideally not working with keys separate from the actual object, using a compare function to sort.</li>
<li>Stable sorting for equivalent objects is desired, but not required. </li>
<li>Random access is not required.</li>
</ul>

<p>I realize I can just build myself a balanced tree structure, I was just wondering if the framework already contains such a beast.</p>

If the key is also an attribute of the object, you might try the
```
System.Collections.ObjectModel.KeyedCollection<TKey, TItem>
```
.  It's an abstract class, but if your key is just a property of the item then it's real simple to derive from.