2014-02-14 346 views
-2

我在C#中有一个程序,在Visual Studio中运行它时工作正常。System.IndexOutOfRangeException:索引超出范围

但是当我运行该文件时,我得到一个主要的错误。

错误是:

未处理的异常:System.IndexOutOfRangeException:索引超出阵列

的边界的我的主要: 错误是在INT塔拉= convert.toInt32 .. 。

namespace MultiplicationTable 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int tala = Convert.ToInt32(args[0]); 
      MultiplicationTable test = new MultiplicationTable(tala); 
      Console.ReadLine(); 
     } 
    } 
} 

任何想法?

+0

ARGS有没有值,所以你没有传递任何参数给它 – Dreamwalker

+2

应指定在Visual Studio程序的参数。 – Yuan

回答

6

问题:当您从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"); 
} 
+0

它如何在VS中运行良好? VS是否在调试模式下提供一些标准参数? – germi

+0

我明白了。所以当它在VS中运行时,它的原因是我在命令行Arguemnts中有一个数字? – user3265963

+0

我在前面的命令行参数中添加了一个数字,所以必须是原因 – user3265963

-1

是,

的海报前说,要么你必须参数传递给你的程序,或者你必须检查,如果ARGS if语句不是null并且“捕获”这个错误。

if(args) { 
//here your code 
} 

或者,你可以尝试的尝试 - catch语句:

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