I was having an interesting debate with a programmer in the company I now work for (Blueberry Consultants) over which was better; ArrayList or the new List<> Generic introduced in .Net 2. He was firmly for ArrayList, and I believed List<>. For example, you could use both to store a String list such as: ArrayList ArrayList lMyStringList = new ArrayList(); string lTempString = "Example code!"; lMyStringList.Add(lTempString); Generic List<> List<string> lMyStringList = new List<string>(); string lTempString = "Example code!"; lMyStringList.Add(lMyStringList); Both the above give you exactly the same result, but on the Generic list you can only assign strings to the list - anything else will raise an exception (I find this a very handy feature personally). If you wanted to store a multitude of types, simply inherit from a common base, and use the base as the list identifier. Use .GetType() == typeof(Whatever) to work out what type the object is and create a new typecast when you need to work with it. Simple and safe. Finally, technically speaking, ArrayList does a lot of boxing operations (because it can take any type). The Generic List does not. This means Generic Lists are more efficient :) On both memory and CPU cycles :) I can feel an optimisation urge coming on.