控制台应用程序中的System.IndexOutOfRangeException - 可能基于系统

时间:2017-10-16 12:09:44

标签: c# arrays arguments main indexoutofrangeexception

对我来说这是一个令人费解的问题。我知道大多数这些类型的错误来自于尝试访问数组范围之外的东西(错误也是如此),但它并没有在这里加起来。以下是错误:

  

System.IndexOutOfRangeException:索引超出了范围   Program.cs中的MyProgram.Program.Main(String [] args)中的数组:第47行

这里唯一的问题是我的程序的第一行是第47行(它只定义了一个MailAddress变量)。如果我注释掉该行,则第二行错误,即定义SMTP客户端。直到昨天,这个程序在过去两个月左右每天早上都有。在过渡期间,我没有更改代码,重新编译或对其做任何事情(尽管从那以后我已经尝试了一些调试,以便在它崩溃后弄明白)。

程序本身非常简单,只需使用System.Net.MailSystem.IO查看一些文本文件并发送内容的电子邮件。

我的问题,虽然我知道不建议在没有任何代码的情况下发帖,但这是一个普遍的问题。既然我知道它适用于另一个系统(我只是在那里运行),我的问题是什么可能导致这种行为/错误?

我尝试的事情:

  • 修复.NET Framework 4.5.2(程序上的目标框架是4.5)。
  • 尝试重新编译x64(以前是x86)。
  • 重新开始(显然,只是想指出这一点)。
  • 禁用要测试的Windows防火墙(不太可能是因为错误)。

这里有什么明显的东西我不在吗?

编辑:

        static void Main(string[] args)
    {

            MailAddress sendEmailFromNice = new MailAddress("email@email.com", "Nice Email Name");
            SmtpClient client = new SmtpClient();
            client.Port = smtpport;
            client.Host = smtphost;
            client.EnableSsl = true;
            client.Timeout = 25000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential(sendEmailFrom, sendEmailFromPass);

            ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            { return true; };

            // gotten list
            List<int> alreadyGottenList = new List<int>();
            string line = null;
            string[] lineSplit = null;
            int currentInt = 0;
            if (File.Exists(storedIntList))
            {
                using (var reader = new StreamReader(storedIntList))
                {
                    line = null;
                    while ((line = reader.ReadLine()) != null)
                    {
                        currentInt = int.Parse(line.Trim());
                        alreadyGottenList.Add(currentInt);
                        currentInt = 0;
                    }
                } 
            }

            List<int> newIntsToGet = new List<int>();
            if (File.Exists(LogFile))
            {
                using (var readerPrimaryToday = new StreamReader(LogFile))
                {
                    while ((line = readerPrimaryToday.ReadLine()) != null)
                    {
                        lineSplit = line.Split(',');

                        if (lineSplit[0].ToString() != "header")
                        {
                            currentInt = int.Parse(lineSplit[8].ToString().Trim());
                        }
                        if (!alreadyGottenList.Contains(currentInt))
                        {
                            newIntsToGet.Add(currentInt);
                            alreadyGottenList.Add(currentInt);
                            File.AppendAllText(storedIntList, currentInt.ToString() + Environment.NewLine);
                        }
                    }
                }
            }

    string emailBody = "BodyHere ";
    string emailSubject = "Subject here";

    foreach (var thisVar in newIntsToGet)
    {
        emailBody = emailBody + thisVar.ToString() + Environment.NewLine;
    }

    MailMessage messageToSend = new MailMessage();
    messageToSend.Subject = emailSubject;
    messageToSend.Body = emailBody;
    messageToSend.IsBodyHtml = false;

    messageToSend.To.Add(sendEmailTo);
    client.Send(messageToSend);
}

它只有一个包含数字的.csv文件,然后检查文本文件中是否有我尚未见过的数字。如果找到,则将其添加到电子邮件和存储的.csv文件中。

1 个答案:

答案 0 :(得分:2)

我不确定,但看看你的代码,IndexOutOfArrayException可能与以下几行有关:

 func goToPage(goto storyBoardId: String, ofType typeUIViewController: UIViewController.Type) -> UIViewController {
    let storyBoard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
    let newPage = storyBoard.instantiateViewController(withIdentifier: storyBoardId) as! typeUIViewController // Error: use of undeclared type 'typeUIViewController'
    self.present(newPage, animated: true, completion: nil)

 return newPage
}

您似乎没有检查lineSplit中是否有任何返回。例如,如果您读取的LogFile以某种方式被修改并且现在包含一个新行,则会导致lineSplit [0]出现问题 - 或者如果日志被修改,现在您没有第9列的值lineSplit [8]