未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围

时间:2015-01-28 02:56:10

标签: c#

我在其他线程中看到了这个错误的几个答案,但我想知道具体如何这适用于我的代码。您输入2个参数,它将添加或减去它们。 (例如:calc.exe add 2 2)当我按q退出程序时,我得到以下内容:

  

未处理的异常:System.IndexOutOfRangeException:索引是   在Calc.Calc.Main(String [] args)

的数组边界之外

有人可以解释我在代码中出错的地方以及如何修复它吗?感谢。

using System;

namespace Calc
{
    public class Calc
    {
        // Calc app
        /// <summary>
        /// Calc app: 
        /// Actions: add, sub, multi, div
        /// Param: calc action value 1, value 2
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                string ops = args[0];
                string input1 = args[1];
                string input2 = args[2];

                while (ops != "q")
                {
                    Console.WriteLine("Ready");
                    if (ops == "add")
                    {
                        Add(input1, input2);
                    }
                    else if (ops == "sub")
                    {
                        Sub(input1, input2);
                    }
                    else
                    {
                        Console.WriteLine("Operation not supported: [" + ops + "]");
                        Console.WriteLine("Try again.");
                    }


                    string[] inputs = Console.ReadLine().Split(' ');
                    ops = inputs[0];
                    input1 = inputs[1];
                    input2 = inputs[2];

                }

                // exit the app
                return;
            }

            // no argument was provided
            Console.WriteLine("Show help!");


            Console.ReadKey();

        } //main end

        public static void Add(string val1, string val2)
        {
            int num1 = Convert.ToInt32(val1);
            int num2 = Convert.ToInt32(val2);
            Console.WriteLine("Result: {0} ", num1 + num2);
        }

        public static void Sub(string val1, string val2)
        {
            int num1 = Convert.ToInt32(val1);
            int num2 = Convert.ToInt32(val2);
            Console.WriteLine("Result: {0} ", num1 - num2);
        }
    } 
}

1 个答案:

答案 0 :(得分:1)

您必须检查args是否具有该数量的值,就像您正在检查args.Length&gt; 0,也检查args [1]并首先设置args [2]。

您正在获取和IndexOutOfRange异常,因为在程序运行的某个时刻,您没有给它3个值,可能是在您输入&#39; q&#39;它预计会有2个值存在,但它们并不存在。在尝试使用它之前检查是否存在,或者使用try catch包装它并在catch中设置默认值。

编辑:这将是这些问题,未经测试:

try{
    string input1 = args[1];
}
catch (System.IndexOutOfRangeException ex)
{
    string input1 = '';
}

来自https://msdn.microsoft.com/en-us/library/ms173162.aspx

您还可以使用命令行参数解析器来使您的应用更清晰,例如http://www.codeproject.com/Articles/3111/C-NET-Command-Line-Arguments-Parser