.Net application development specialists
asp.net, c#, vb.net, html, javascript, jquery, html, xhtml, css, oop, design patterns, sql server, mvc and much more
contact: admin@paxium.co.uk

Paxium is the company owned by myself, Dave Amour and used for providing IT contract development services including


  • Application development - Desktop, Web, Services - with Classic ASP, Asp.net WebForms, Asp.net MVC, Asp.net Core
  • Html, Css, JavaScript, jQuery, React, C#, SQL Server, Ado.net, Entity Framework, NHibernate, TDD, WebApi, GIT, IIS
  • Database schema design, implementation & ETL activities
  • Website design and hosting including email hosting
  • Training - typically one to one sessions
  • Reverse Engineering and documentation of undocumented systems
  • Code Reviews
  • Performance Tuning
  • Located in Cannock, Staffordshire
Rugeley Chess Club Buying Butler Cuckooland Katmaid Pet Sitting Services Roland Garros 60 60 Golf cement Technical Conformity Goofy MaggieBears Vacc Track Find Your Smart Phone eBate Taylors Poultry Services Lafarge Rebates System Codemasters Grid Game eBate DOFF

Collection Classes in .net - the ArrayList

This is the second part of an article on collection classes in .net with C#.  This part covers the ArrayList.

For the first part see http://www.audacs.co.uk/ViewPage.aspx?PageID=512

For the next part on Generic Lists see http://www.audacs.co.uk/ViewPage.aspx?PageID=514

Ok so on to the ArrayList.  ArrayList is a class found at System.ArrayList.  It implements the following interfaces:

IList, ICollection, IEnumerable, ICloneable

It is a collection which works a bit like an array but it's size can grow and shrink as required.  Items can be added and removed easily using Add and Remove methods.

The ArrayList holds objects - ie instances of System.Object.  That way we can have an ArrayList which contains any class at all since all classes ultimatley inherit from Object.  It does also allow us to mix objects within the collection although that is not normally thought of as being the reason for designing the class this way. 

So lets have a look at an example program.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ArrayLists
{
    public class Program
    {
        static void Main(string[] args)
        {
            //Create a new instance of an ArrayList
            ArrayList things = new ArrayList();
 
            //Create and populate some instances of the Person class
            Person dave = new Person("Dave Amour", 42);
            Person tracey = new Person("Tracey Amour", 36);
            Person sarah = new Person("Sarah Bloggs", 23);
            Person fred = new Person("Fred Smith", 27);
            Person bill = new Person("Bill Brown", 46);
 
            //Add all of the Person instances into the ArrayList
            things.Add(dave);
            things.Add(tracey);
            things.Add(sarah);
            things.Add(fred);
            things.Add(bill);
 
            //Iterate over the items in the collection and output details to screen
            for (int i = 0; i < things.Count; i++)
            {
                Console.WriteLine(((Person)things[i]).Name + " (aged " + ((Person)things[i]).Age.ToString() + ")");
            }
 
            //Writes a blank line for readability
            Console.WriteLine();
 
            //Remove fred
            things.Remove(fred);
 
            //Output that we have removed fred
            Console.WriteLine("Removed fred" +Environment.NewLine);
 
            //Iterate over the items in the collection and output details to screen
            for (int i = 0; i < things.Count; i++)
            {
                Console.WriteLine(((Person)things[i]).Name + " (aged " + ((Person)things[i]).Age.ToString() + ")");
            }
 
            //Writes a blank line for readability
            Console.WriteLine();
 
            //Remove the item at position 0
            things.RemoveAt(0);
 
            //Output that we have removed the 1st item
            Console.WriteLine("Removed 1st item" + Environment.NewLine);
 
            //Iterate over the items in the collection and output details to screen
            for (int i = 0; i < things.Count; i++)
            {
                Console.WriteLine(((Person)things[i]).Name + " (aged " + ((Person)things[i]).Age.ToString() + ")");
            }
 
            //Remove items in the range 1..2
            things.RemoveRange(1, 2);
 
            //Writes a blank line for readability
            Console.WriteLine();
 
            //Output that we have removed items in the range 1..2
            Console.WriteLine("Removed range 1-2" + Environment.NewLine);
 
            //Iterate over the items in the collection and output details to screen
            for (int i = 0; i < things.Count; i++)
            {
                Console.WriteLine(((Person)things[i]).Name + " (aged " + ((Person)things[i]).Age.ToString() + ")");
            }
 
            //Stops the console window from closing
            Console.Read();
        }
    }
 
    ///<summary>
    /// Test Person class to be added to the ArrayList for testing
    ///</summary>
    public class Person
    {
        //Constructor
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
 
        //The persons name
        public string Name
        {
            get;
           
            set;
        }
 
        //The persons age
        public int Age
        {
            get;
 
            set;
        }
    }
}
 


This program utilises a few instances of a Person class which just contains a name and age.  We create an ArrayList and add some objects to it.  We then output these to screen.  We then do some removing in various ways and output more results to screen.

So from this you can see that the ArrayList is very easy and convenient to work with.

The only real downside is that becuase it contains a collection of objects then you need to cast to your specific object to do anything useful.  That is why we have the following code which casts the objects to a Person class.

            //Iterate over the items in the collection and output details to screen
            for (int i = 0; i < things.Count; i++)
            {
                Console.WriteLine(((Person)things[i]).Name + " (aged " + ((Person)things[i]).Age.ToString() + ")");
            }


We could have used a foreach statement instead which would have done the casting for us - eg:

            foreach (Person p in things)
            {
                Console.WriteLine(p.Name + " (aged " + p.Age.ToString() + ")");
            }


However casting is still being done and this can lead to problems.  Suppose one of the objects in our ArrayList isn't of the type expected?  In that case then we could get a runtime error.  The solution to this problem lies with Generics and Generic Lists which we will look at later and really ArrayLists shouldn't be used anymore as a Generic List is preferable.  You do however need to be familliar with ArrayLists for historical purposes and legacy apps and code.

Other instance method worth being aware of include:

  • Clear
  • Clone
  • Contains
  • CopyTo
  • Sort
  • Reverse
  • ToArray

And there are a few others too but given the obselessence of the ArrayList that should be enough for us to be aware of. 

For the next part on Generic Lists see http://www.audacs.co.uk/ViewPage.aspx?PageID=514