尝试在 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
所以我目前正在学习 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