我在其他线程中看到了这个错误的几个答案,但我想知道具体如何这适用于我的代码。您输入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);
}
}
}
答案 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