using System;
using System.Collections;

namespace ArrayListSORTING
{

public enum SortDirection
{
Asc,
Desc
}

public class CategoryComparer : IComparer
{

private SortDirection m_direction = SortDirection.Asc;

public CategoryComparer() : base() { }

public CategoryComparer(SortDirection direction)
{
this.m_direction = direction;
}

int IComparer.Compare(object x, object y)
{

Category categoryX = (Category) x;
Category categoryY = (Category) y;

if (categoryX == null && categoryY == null)
{
return 0;
}
else if (categoryX == null && categoryY != null)
{
return (this.m_direction == SortDirection.Asc) ? -1 : 1;
}
else if (categoryX != null && categoryY == null)
{
return (this.m_direction == SortDirection.Asc) ? 1 : -1;
}
else
{
return (this.m_direction == SortDirection.Asc) ?
categoryX.TypeCode.CompareTo(categoryY.TypeCode) :
categoryY.TypeCode.CompareTo(categoryX.TypeCode);
}
}
}
}

---------

using System;
using System.Collections;

namespace ArrayListSORTING
{

class SortArrayList
{

[STAThread]
static void Main(string[] args)
{

ArrayList list = new ArrayList();

list.Add(new Category("Music", 4));
list.Add(new Category("Play", 7));
list.Add(new Category("Dance", 2));
list.Add(new Category("Party", 9));
list.Add(new Category("Disco", 1));
list.Add(new Category("Sport", 3));

list.Sort(new CategoryComparer());

Console.WriteLine("Array in Ascending Order");
foreach (Category cate in list)
{
Console.WriteLine("CategoryName: " + cate.Type + ", CategoryCode: " + cate.TypeCode.ToString());
}

list.Sort(new CategoryComparer(SortDirection.Desc));

Console.WriteLine("\n\rArray in Desending Order");
foreach (Category cate in list)
{
Console.WriteLine("CategoryName: " + cate.Type + ", CategoryCode: " + cate.TypeCode.ToString());
}
Console.ReadLine();
}
}
}