我试图运行一个可以读取数组中的奇数和偶数的程序,但不断出现的错误是System.InvalidCastException。这是代码:
ArrayList Num = new ArrayList();
Console.WriteLine("Enter 5 numbers");
for (int i = 0; 5 > i; i++)
{
Console.Write((i + 1) + ". ");
Num.Add(Console.ReadLine());
}
Num.Sort();
Console.Write("Sorted numbers: ");
foreach (string value in Num)
{
Console.Write(value + " ");
}
Console.ReadLine();
ArrayList odd = new ArrayList();
ArrayList even = new ArrayList();
foreach (int value in Num)
{
if (value % 2 != 0)
{
odd.Add(value);
}
else
{
even.Add(value);
}
}
Console.Write("Odd numbers: ");
foreach (string number in odd)
{
Console.Write(number + " ");
}
Console.Write("Even numbers: ");
foreach (string numbers in even)
{
Console.Write(numbers + " ");
}
Console.ReadLine();
错误表明我的int value
code it's value 无法转换。谁能教我解决这个错误的正确方法?
最佳答案
好的,让我们从头开始。如果您查看 Console.ReadLine 的返回值,您将看到它返回 string
:
Return Value
Type: System.String
ArrayList
可以包含不同类型的对象。您的代码编译得很好,因为 Num
掩盖了对象类型之间的差异。
当您稍后尝试遍历 ArrayList Num
时,您假设其中的每个元素都是 int
类型:
foreach (int value in Num)
但它不是!你已经用字符串填充了它。当编译器到达这一行时,它会尝试隐式地将每个元素转换为 int
(因为你这样告诉它)但是一个简单的转换形式 string
到 int
会导致你遇到的那个异常
这里可以找到几个解决方案......
1)
您可以将循环中的对象视为它们的类型,即 object
。然后在每次迭代中,您可以尝试使用 TryParse 将它们转换为 int
,如果转换有效,您可以将它们添加到您的列表中:
foreach (object value in Num)
{
int intvalue = 0;
if (Int32.TryParse(value.ToString(), out intvalue)
{
if (intvalue % 2 != 0)
{
odd.Add(intvalue);
}
else
{
even.Add(intvalue);
}
}
}
2)
另一种可能性是当您从控制台读取数字时立即转换数字并选择适合所讨论类型的集合,即 int
.例如一个通用的 List
List<int> Num_Int_List = new List<int>();
for (int i = 0; 5 > i; i++)
{
Console.Write((i + 1) + ". ");
if (int.TryParse(Console.ReadLine(), out enteredNumber)
{
Num_Int_List.Add(enteredNumber);
}
else
{
Console.WriteLine("Sorry that was not an integer, try again please");
i-- // here set the counter to the last step to allow the user to repeat the step
}
}
将相同的集合 List<int>
用于 odd
和 even
,您可以按原样使用 foreach 循环:
List<int> odd = new List<int>();
List<int> even = new List<int>();
选择像 List<int>
这样的类型安全集合将帮助您解决与编译时已经存在的类型的不兼容性,而不是像您的情况那样在运行时
关于c# - C# 数组中的 System.InvalidCastException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48781936/