Reordering items which must have alphabetically ordered keys
public static List&lt;Item&gt; MoveIndex(this List&lt;Item&gt; myItems, int from, int to)



Code to the interface, not the implementation: you might be able to rewrite this as

    public static IList&lt;Item&gt; MoveIndex(this IList&lt;Item&gt; myItems, int from, int to)


and if not you can almost certainly rewrite it as

    public static TList MoveIndex&lt;TList&gt;(this TList myItems, int from, int to)
        where TList : IList&lt;Item&gt;





        for (int i = 0; i &lt; myItems.Count; i++)
        {
            myItems[i].Key = i.ToString("D2");
        }



For a start, this looks too tightly bound to me. From the description given I would expect MoveIndex to work with the existing keys, whatever they are.

But given the strong assumptions made here, I wonder whether there's a better solution based on eliminating the List&lt;Item&gt; entirely. Can you maintain an IList&lt;string&gt; which contains the labels and then generate the items lazily with IEnumerable&lt;string&gt;.Select(Func&lt;string, int, Item&gt;)?