C#
IEnumerable
ICollection
Type Conversion
Programming

Cannot convert from an IEnumerableT to an ICollectionT

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

To understand the issue of converting from an `IEnumerable`````<T>`````` to an `ICollection`````<T>`````` in C#, it is important to examine the nature of these interfaces, explore why direct conversion isn't feasible, and consider potential solutions.

Understanding IEnumerable`````<T>````` and ICollection`````<T>`````

IEnumerable`````<T>`````

The `IEnumerable`````<T>`````` interface belongs to the `System.Collections.Generic` namespace and is a key component of .NET's collections. This interface provides a simple enumerator to iterate over a collection of a specified type `T`.

Key Characteristics:

  • Read-only: `IEnumerable`````<T>`````` only provides the capability to iterate through a collection.
  • Lazy evaluation: It allows deferring execution until the sequence is actually enumerated.
  • Commonly used in LINQ to SQL and LINQ to Objects.

ICollection`````<T>`````

The `ICollection`````<T>`````` interface also resides in the `System.Collections.Generic` namespace and extends `IEnumerable`````<T>``````. Beyond iteration, it allows modification of the collection (adding, removing, etc.).

Key Characteristics:

  • Read-write: Allows modification.
  • Contains methods like `Add(T item)`, `Remove(T item)`.
  • Consists of properties like `Count` and methods for copying elements to an array.

Why You Can't Convert Directly

The inherent read-only nature of `IEnumerable`````<T>`````` makes it impossible to directly convert to an `ICollection`````<T>`````` because an `ICollection`````<T>`````` assumes additional capabilities like adding and removing elements, which are not supported by `IEnumerable`````<T>``````.

Technical Explanation

The distinction arises because:

  1. `IEnumerable`````<T>`````` is primarily for data traversal.
  2. `ICollection`````<T>`````` requires methods for data manipulation, which cannot be guaranteed by `IEnumerable`````<T>``````.

Therefore, an implicit or explicit conversion without casting or other methods will fail, leading to errors like:

  • Performance: Conversion methods like `ToList()` and creating custom collections involve additional memory allocations and CPU time.
  • Immutability: Ensure that operations on the resulting `ICollection`````<T>`````` do not violate any immutability constraints in your application.

Related reading
Course
Intermediate
27 lessons
14 hours
OOD Fundamentals

Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

All Rights Reserved.