C# System.IndexOutOfRangeException:索引超出范围

C# System.IndexOutOfRangeException:索引超出范围,c#,C#,我有一个C语言的程序,当我在Visual Studio中运行它时,它运行得很好 但是当我运行这个文件时,我在main中得到了一个错误 错误是: 未处理的异常:System.IndexOutOfRangeException:索引超出数组的边界 我的主要意见是: 错误位于int-tala=convert.toInt32 有什么想法吗?问题:当您从Visual Studio运行程序时,您提供了参数,但是当您通过双击程序直接运行程序时,您不能提供参数,因为它将被直接调用 解决方案:您需要正确提供命令行参

我有一个C语言的程序,当我在Visual Studio中运行它时,它运行得很好

但是当我运行这个文件时,我在main中得到了一个错误

错误是:

未处理的异常:System.IndexOutOfRangeException:索引超出数组的边界

我的主要意见是: 错误位于int-tala=convert.toInt32


有什么想法吗?

问题:当您从Visual Studio运行程序时,您提供了参数,但是当您通过双击程序直接运行程序时,您不能提供参数,因为它将被直接调用

解决方案:您需要正确提供命令行参数,请按照以下步骤从命令行运行程序

步骤1:转到命令提示符

步骤2:转到程序exe文件路径

步骤3:现在通过提供命令行参数执行程序,如下所示:

c:\myprogrampath\program.exe 12
请尝试以下代码以避免异常:

if(args.Length>0)
{
    int tala = Convert.ToInt32(args[0]);
    MultiplicationTable test = new MultiplicationTable(tala);
    Console.ReadLine();
}
else
{
    Console.WriteLine("No Command Line Arguments - Quiting");
}

正如前面的海报所说,要么您必须向程序传递参数,要么您必须使用if语句检查args是否为null,并“捕获”此错误

if(args) {
//here your code
}
或者,您可以尝试try-catch语句:

try {
   //here you read the arguments and pass to a variable
}
catch(System.IndexOutOfRangeException) {
     //other codepart
}

args没有值,因此您没有向它传递任何参数。您应该在Visual Studio中为程序指定一个参数。为什么它在VS中运行良好?VS是否在调试模式下提供一些标准参数?我明白了。因此,在VS中运行时出现问题的原因是我在命令行参数中有一个数字?我在前面的命令行参数中添加了一个数字,所以这一定是reason@germi:他可能使用属性选项在VS中提供了参数,但是,当OP双击exe文件时,就不可能给出参数,所以它肯定会抛出exceptionI see——从这个问题上看,我认为他不会在VS中提供参数,但在执行应用程序时不会。
try {
   //here you read the arguments and pass to a variable
}
catch(System.IndexOutOfRangeException) {
     //other codepart
}