【发布时间】:2018-03-27 22:57:49
【问题描述】:
这对我来说是一个令人费解的问题。我知道大多数这些类型的错误是由于试图访问数组边界之外的东西(错误也说明了这一点),但它并没有在这里加起来。以下是错误:
System.IndexOutOfRangeException:索引超出范围 Program.cs 中 MyProgram.Program.Main(String[] args) 处的数组:第 47 行
这里唯一的问题是我的程序的第一行在第 47 行(它只定义了一个 MailAddress 变量)。如果我注释掉该行,则第二行错误,即定义 SMTP 客户端。直到昨天,在过去两个月左右的时间里,每天早上都会运行同样的程序。在此期间,我没有更改代码、重新编译或对其进行任何操作(尽管从那以后我尝试了一些调试以在它崩溃后弄清楚)。
程序本身非常简单,它只是使用System.Net.Mail 和System.IO 来查看一些文本文件并发送内容的电子邮件。
虽然我知道不建议在没有任何代码的情况下发布,但我的问题是一般性的。由于我知道它可以在另一个系统上运行(我只是在那里运行它),我的问题是什么可能导致这种行为/错误?
我尝试过的事情:
- 修复.NET Framework 4.5.2(程序上的目标Framework为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 文件中。
【问题讨论】:
-
向我们展示代码
-
请分享一些代码以通过。
-
索引是多少,数组有多长...
-
显示代码..
-
添加了代码,但是不管 Main() 的第一行是什么,它都会出错。
标签: c# arrays arguments main indexoutofrangeexception