Search code examples
c#linqcastingiterationienumerable

Specified cast is not valid when trying to iterate through an IEnumerable<int> in C#


so I am currently learning LINQ in C# and I was trying this Cast<> extension method which doesn't really seem to work out. When I try to iterate through the IEnumerable<int> values, it doesn't work it gives me the error :

System.InvalidCastException("Specified cast is not valid").

This is the code: (I've also tried to cast the 'result' variable into an array with ToArray() but it still didn't work, regardless of what I tried)

List<string> strings = new List<string>(){ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10 };
IEnumerable<int> result = strings.Cast<int>();

foreach(int number in result){
    Console.WriteLine(number);
}

Console.ReadKey();

I've also tried to use 'var' instead of 'int' when trying to iterate through the IEnumerable result variable but it still doesn't work out, Here is an image of what it shows me:

enter image description here


Solution

  • Cast is not for the value type casting, you cannot convert string to int by using Cast, this method is used to convert some array types that don't implement IEnumerable, e.g. ArrayList. So that you cannot use LINQ with ArrayList. If you want to query the ArrayList with LINQ syntax, you can use Cast to transform ArrayList into Enumerable, then the LINQ query is available. Please refer to the official document