Most of the benefits will not be in performance but in type safety and the LINQ extension methods.
The biggest issue with the old collections vs the generics is having to re-cast objects as you're taking them out. Probably the best way to benchmark it is just do a large iteration stopwatch test while reading data out. Also do some small routines and look
at the IL generated.
While explicit casting isn't necessarily slow it does take an extra few steps to do so. That's why it's recommended to use the as-is pattern if you do have to cast with performance in mind. It tells the CLR to skip some checks that are done in an explicit
cast (null reference, value type, inheritance). It has one drawback, it only works with reference types. Still over thousands of iterations it will show performance gains. It also eliminates the need to have to catch null reference exceptions.
While I didn't tackle the Stack and HashTable usage I did post my patches for all the LINQ helper methods. I updated to implement IList<T> and use a Dictionary<K,V> where needed. I did add in tons of helper methods that makes using LINQ