What is IList in C#?

Understanding IList in C#

In C#, IList is an interface from the System.Collections namespace that represents a collection of objects that can be individually accessed by index. It is a fundamental interface that provides a way to manage collections in a dynamic and flexible manner. IList extends ICollection and IEnumerable, making it a versatile option for working with lists.

Key Features of IList

  1. Index-Based Access: The primary feature of IList is that it allows accessing elements by their index, which makes it suitable for collections that need to be searched, sorted, or modified frequently.
  2. Dynamic Size: Unlike arrays, the size of an IList collection can dynamically change. You can add or remove elements without worrying about resizing the underlying collection.
  3. Flexibility in Implementations: IList can be implemented by different collection types, like List<T>, ArrayList, and BindingList<T>, which provides various options based on the specific requirements of your application.
  4. Supports Read-Write Operations: IList provides methods to add, remove, insert, and modify elements, making it a read-write collection.

Properties and Methods of IList

  • Properties:

    • Count: Gets the number of elements contained in the IList.
    • IsReadOnly: Gets a value indicating whether the IList is read-only.
    • Item[Int32]: Gets or sets the element at the specified index. This is the indexer in C#.
  • Methods:

    • Add(Object item): Adds an object to the end of the IList.
    • Clear(): Removes all elements from the IList.
    • Contains(Object item): Determines whether the IList contains a specific object.
    • IndexOf(Object item): Determines the index of a specific object in the IList.
    • Insert(Int32 index, Object item): Inserts an object into the IList at the specified index.
    • Remove(Object item): Removes the first occurrence of a specific object from the IList.
    • RemoveAt(Int32 index): Removes the IList item at the specified index.

When to Use IList

IList is ideal for scenarios where you need a collection that:

  • Requires dynamic resizing.
  • Supports read and write operations.
  • Needs to be accessed by index frequently.
  • Can utilize different collection types based on specific performance or functionality requirements.

Common Implementations of IList

  1. List<T>: A generic implementation of IList that provides better performance and type safety. It is the most commonly used implementation for most general-purpose list operations.

  2. 
     
    csharp

    Copy code

    IList<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; numbers.Add(6); // Adds 6 to the list int index = numbers.IndexOf(3); // Finds the index of the number 3 numbers.RemoveAt(index); // Removes the number at the found index

  3. ArrayList: A non-generic implementation of IList that can store any type of object, but lacks type safety and may incur boxing and unboxing overhead when dealing with value types.

    
     
    csharp

    Copy code

    IList mixedList = new ArrayList(); mixedList.Add(1); mixedList.Add("Hello"); mixedList.Add(3.14);

  4. BindingList<T>: A specialized implementation that supports change notifications and is useful in data-binding scenarios, particularly with UI frameworks like Windows Forms.

    
     
    csharp

    Copy code

    IList<string> names = new BindingList<string> { "Alice", "Bob" }; names.Add("Charlie");

  5. Conclusion

    IList is a powerful and versatile interface in C# that provides a standardized way to work with collections that require dynamic size management and read-write operations. Whether you need a list that supports change notifications or one that offers high performance, IList has implementations that can fit your needs. Understanding IList

    Practical Example

    Here is a practical example of using IList with List<T> to demonstrate its flexibility:

    
     

    csharp

    Copy code

    using System; using System.Collections.Generic; class Program { static void Main() { IList<string> fruits = new List<string> { "Apple", "Banana", "Cherry" }; // Adding an element fruits.Add("Dragonfruit"); // Inserting an element at a specific index fruits.Insert(1, "Orange"); // Removing an element by value fruits.Remove("Banana"); // Removing an element at a specific index fruits.RemoveAt(0); // Displaying all elements foreach (var fruit in fruits) { Console.WriteLine(fruit); } } }

    Output:

    
     

    mathematica

    Copy code

    Orange Cherry Dragonfruit

     

Up Next
    Ebook Download
    View all
    Learn
    View all