You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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变量从头到尾没有被实际使用,属于冗余代码
修正方案

正确接收用户输入并存入数组的逻辑非常直接:

  1. 拿到用户输入的运算类型、参与运算的数字总个数后,直接用总个数初始化int类型的存储数组,数组必须声明在循环外部,避免循环执行时被重复重置
  2. 循环次数和数字总个数保持一致,每次循环提示用户输入对应序号的数字,转成int类型后按下标从0开始依次存入数组
  3. 所有数字收集完成后,遍历数组执行对应运算输出结果即可

以你当前编写的乘法逻辑为例,修正后可正常运行的代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:40:05