尝试在 C# 中迭代​​ IEnumerable<int> 时,指定的转换无效

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

所以我目前正在学习 C# 中的 LINQ,我正在尝试这种 Cast<> 扩展方法,但它似乎并没有真正奏效。当我尝试遍历 IEnumerable<int> 值时,它不起作用,它给我错误:

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

这是代码: (我也尝试过将 'result' 变量转换为带有 ToArray() 的数组,但无论我如何尝试,它仍然无效)

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();

我也尝试在尝试遍历 IEnumerable 结果变量时使用 'var' 而不是 'int' 但它仍然无法解决,这是它显示的图像我:

您应该改用 int.TryParse。所以你可以这样实现转换:

strings
    .Select(x => int.TryParse(x, out var result) ? result : 0)
    .ToArray()

strings
    .Select(x => int.TryParse(x, out var result) ? result : throw new InvalidCastException(message: ""))
    .ToArray()

Cast不适用于值类型的转换,不能使用Cast将string转换为int,该方法用于转换一些没有实现IEnumerable的数组类型,例如数组列表。这样您就不能将 LINQ 与 ArrayList 一起使用。如果想用LINQ语法查询ArrayList,可以用Cast将ArrayList转换成Enumerable,就可以进行LINQ查询了。 请参考official document