Arraylists are object lists, whatever is in it, is assumed to be an object, thus when you get something out of it, you need to cast it as its type
Code:
System.Collections.ArrayList players = new System.Collections.ArrayList();
Player one = new Player();
AIPlayer two = new AIPlayer();
players.Add(one);
players.Add(two);
((Player)players[0]).Move;
((Player)players[1]).Move;
...etc
If you end up casting it as the wrong type, you will get a Invalid cast type exception and a crash.
Using a generic list, can give you a list that doesnt need casting. For example
Code:
System.Collections.Generics.List<Player> players = new System.Collections.Generics.List<Player>();
Player one = new Player();
AIPlayer two = new AIPlayer();
players.Add(one);
players.Add(two);
players[0].Move;//this will work
players[1].Move;//this will work
//If you needed to see if the specific player was a AIPlayer you could do this
if( players[0] is AIPlayer )
((AIPlayer)players[0]).DoThis();
Hope this helps