title: C# Priority List
body: <p>I'm having trouble finding the right C# data structure.  I'm looking for a PriorityList.  It needs to have the following:</p>
  
  <ul>
  <li>Only one item a given priority</li>
  <li>Must remain sorted at all times</li>
  <li>Ability to add an item to the end of the list -- prorityList.Add(item)</li>
  <li>Ability to insert an item at a given priority -- priorityList.Add(3, item)</li>
  <li>Ability to access any element using the priority -- priorityList[3]</li>
  <li>Ability to remove an item at a given priority -- priorityList.RemoveAt(3)</li>
  <li>When an item is added or removed, the rest of the list must shift up or down appropriately -- for example, if the third item is removed, the fourth item becomes the third item, the fifth item becomes the fourth item, etc.</li>
  </ul>
  
  <p>C#'s SortedList looked promising, but it can't handle inserting at a priority that already exists or removing an element at a given priority (having the list shift appropriately in both cases).</p>