I need a HashSet that preserves insertion ordering, are there any implementations of this in the framework?
You can get this functionality easily using KeyedCollection specifying the same type argument for TKey and TItem:
public class OrderedHashSet : KeyedCollection { protected override T GetKeyForItem(T item) { return item; } }