I have started playing with using Generics in C# and I think they have some great uses. I use ArrayLists in many places in applications to keep track of groups of variables that are all of the same type. The generics will let me explicitly state what is going to be stored in the array, making my code easier to maintain. It also removes the need to cast an item from an Object to it's correct type every time I need to access it.
Here is a small sample of how to use a generic list:
//Create our List
System.Collections.Generic.List<House> Houses = new List<House>();
//Populate the list with Items
Houses.Add (new House("1234 Main St.","Royal Oak", "MI", "48123"));
Houses.Add (new House("8825 Fifth Ave.","New York", "NY", "98653"));
Houses.Add (new House("5456 South Lawn Rd.","Oak Creek", "IN", "65789"));
//Retreive an item from the list
//(Note: there is no need to cast this, because it is already of type House)
House x = Houses[2];
//You can still loop through the items in the generic lists
foreach (House oHouse in Houses)
{
listBox1.Items.Add(oHouse.Address);
}