Brad asks me to comment on the issue of naming of generic type parameters. Certainly the longer names seem preferable when the type is being used or viewed in the class browser. Currently, I'm using ElementType, KeyType, and ValueType as my generic type parameters. But when I'm writing code in these generic classes, the long type names can become tedious. Here's an actual single line of code:

foreach (Pair<KeyType,ValueType> pair in tree.EnumerateBetweenReversed(new Pair<KeyType,ValueType>(first, default(ValueType)), new Pair<KeyType,ValueType>(last, default(ValueType))))

in the single letter style, it is still long but definitely easier to read...

foreach (Pair<K,V> pair in tree.EnumerateBetweenReversed(new Pair<K,V>(first, default(V)), new Pair<K,V>(last, default(V))))

For now, I'm sticking with the long names, but I reserve the right to change my mind...