C#编写计算器出现String[]无法转IConvertible报错求解
问题根因
直接报错原因
你遇到的运行时报错信息如下:
Unable to cast object of type 'System.String[]' to type 'System.IConvertible'
报错位置:第20行int number4 = Convert.ToInt32(number3);
报错核心原因是类型不匹配:number3是你声明的string[]字符串数组类型,本质是一组字符串的集合,而Convert.ToInt32方法只能处理单个可转换为整数的值(比如单个数字字符串、数值类型变量),数组本身没有办法直接被转成单个整数,因此触发类型转换异常。实际上你需要的「参与运算的数字总个数」这个值,已经在之前转换好的number2变量里存储,这行数组转整数的代码完全是多余的。
其他逻辑问题
除了直接触发报错的点,代码后半段还有多处逻辑错误,就算修复了转换问题也无法正常运行:
- 存储运算数字的数组声明位置错误:你把
int[] equationNumbers写在了do-while循环内部,每执行一次循环就会新建一个空数组,之前输入存储的值会全部丢失 - 数组下标逻辑错误:C#数组的合法下标是从
0开始的,长度为n的数组只能访问下标0到n-1的位置,你把下标初始值设为数字总个数,第一次赋值就会触发数组越界异常;同时下标变量写在循环内部,每次循环都会重置初始值,递减逻辑完全不生效 - 循环终止条件错误:现有条件
newnumber >= number4会在第一次循环后永久成立,直接进入死循环 - 声明的
string[] number3变量从头到尾没有被实际使用,属于冗余代码
修正方案
正确接收用户输入并存入数组的逻辑非常直接:
- 拿到用户输入的运算类型、参与运算的数字总个数后,直接用总个数初始化int类型的存储数组,数组必须声明在循环外部,避免循环执行时被重复重置
- 循环次数和数字总个数保持一致,每次循环提示用户输入对应序号的数字,转成int类型后按下标从0开始依次存入数组
- 所有数字收集完成后,遍历数组执行对应运算输出结果即可
以你当前编写的乘法逻辑为例,修正后可正常运行的代码如下:
using System; public class Program { public static void Main() { Console.WriteLine("Welcome to the calculator! Enter 1 if you want to multiply. 2 if you want to divide. 3 if you want to add and 4 if you want to subtract"); int opType = Convert.ToInt32(Console.ReadLine()); if (opType == 1) { Console.WriteLine("How many numbers will there be in this multiplication equation?"); int numCount = Convert.ToInt32(Console.ReadLine()); // 数组声明在循环外,长度直接使用用户输入的数字个数 int[] equationNumbers = new int[numCount]; // 循环收集用户输入,下标从0遍历到numCount-1 for(int i = 0; i < numCount; i++){ Console.WriteLine($"Please enter in your {i+1} number"); equationNumbers[i] = Convert.ToInt32(Console.ReadLine()); } // 执行乘法计算 int result = 1; foreach(int num in equationNumbers){ result *= num; } Console.WriteLine($"Multiplication result is: {result}"); } // 加、减、除的逻辑可以按照相同结构补全 } }
内容的提问来源于stack exchange,提问作者Idk v.2
相关产品推荐
相关产品推荐

