ArrayList is one of the most versatile collection types in C#. Although it belongs to the legacy non-generic collections, it still sees use cases today due to its flexibility and ability to hold any type of data. This tutorial will provide a deep understanding of the ArrayList class, complete with real-world applications, examples, and key insights for optimal usage.
The ArrayList
is a non-generic collection in C#, part of the System.Collections
namespace. Unlike arrays, which have a fixed size, ArrayList
can dynamically resize, allowing you to add and remove elements at any time. Its flexibility makes it ideal for scenarios where the data type might vary or when working with legacy code.
ArrayList
is typically used only when type safety isn’t a strict requirement.Creating an ArrayList
is straightforward. First, make sure to include the System.Collections
namespace, as it’s not part of the more modern System.Collections.Generic
library.
using System.Collections;
ArrayList myArrayList = new ArrayList();
You can also initialize an ArrayList
with elements right at the start:
ArrayList myArrayList = new ArrayList() { 1, "Hello", 3.14, DateTime.Now };
In this example, myArrayList
stores an int
, string
, double
, and DateTime
, showcasing ArrayList’s ability to hold different data types.
You can add elements to an ArrayList
using the Add
or AddRange
methods.
ArrayList numbers = new ArrayList();
numbers.Add(1);
numbers.Add(2);
numbers.Add("Three");
ArrayList moreNumbers = new ArrayList() { 4, 5 };
numbers.AddRange(moreNumbers);
Elements in an ArrayList
are accessed by index. However, since ArrayList
stores elements as objects, you may need to cast them to their original type.
int firstElement = (int)numbers[0];
string thirdElement = (string)numbers[2];
You can modify an element by directly assigning a new value to a specific index.
numbers[2] = "Three (modified)";
ArrayList offers several methods for removing elements:
Remove
: Removes the first occurrence of a specified element.RemoveAt
: Removes the element at a specific index.RemoveRange
: Removes a range of elements.ArrayList names = new ArrayList() { "Alice", "Bob", "Charlie" };
names.Remove("Bob");
names.RemoveAt(0);
If you need to remove all elements from the ArrayList
, use the Clear
method.
names.Clear();
Consider an HR system where an ArrayList
is used to store employees of different types temporarily. For instance, storing full-time, part-time, and contractual employees can be challenging if each type has unique properties. With ArrayList
, you can easily handle different types of employees.
using System;
using System.Collections;
public class Employee
{
public string Name { get; set; }
public string Position { get; set; }
public Employee(string name, string position)
{
Name = name;
Position = position;
}
public override string ToString()
{
return $"{Name}, {Position}";
}
}
public class Program
{
public static void Main()
{
ArrayList employeeList = new ArrayList();
employeeList.Add(new Employee("Alice", "Manager"));
employeeList.Add(new Employee("Bob", "Developer"));
employeeList.Add(new Employee("Charlie", "Intern"));
// Adding different object types to demonstrate ArrayList flexibility
employeeList.Add("Contractor"); // Example of a non-employee item
Console.WriteLine("Employee List:");
foreach (var item in employeeList)
{
if (item is Employee employee)
{
Console.WriteLine(employee);
}
else
{
Console.WriteLine(item); // Non-Employee item handling
}
}
// Remove an employee
employeeList.RemoveAt(2);
Console.WriteLine("\nUpdated Employee List:");
foreach (var item in employeeList)
{
Console.WriteLine(item);
}
}
}
In this example:
Name
and Position
properties.ArrayList
named employeeList
and add various employee types and a string
object to demonstrate flexibility.Employee
type before printing.This approach allows us to handle different types of employees, including temporary data, without the strict type constraints of a generic list.
ArrayList
grows as needed, which is helpful for dynamically changing data sets.The ArrayList class in C# is a flexible, non-generic collection that allows you to add, modify, and remove elements of any type dynamically. It’s particularly useful when working with mixed data types or legacy code that doesn’t enforce type safety. However, modern applications generally favor generic collections like List<T> for type safety and performance. Understanding the capabilities and limitations of ArrayList can help developers make informed choices about when to use it effectively.