简单C#错误的帮助

简单C#错误的帮助,c#,.net,C#,.net,我写这个小程序是为了从文本文件中提取任意数量的电子邮件地址。我得到两个错误,“使用未分配的局部变量”,我不知道为什么 static void Main(string[] args) { string InputPath = @"C:\Temp\excel.txt"; string OutputPath = @"C:\Temp\emails.txt"; string EmailRegex = @"^(?:[a-zA-Z0-9_'^&/+-])+(?:\.(?:[a-zA-Z0-9_

我写这个小程序是为了从文本文件中提取任意数量的电子邮件地址。我得到两个错误,“使用未分配的局部变量”,我不知道为什么

static void Main(string[] args)
{
string InputPath = @"C:\Temp\excel.txt";
string OutputPath = @"C:\Temp\emails.txt";
string EmailRegex = @"^(?:[a-zA-Z0-9_'^&/+-])+(?:\.(?:[a-zA-Z0-9_'^&/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$";
string Text = String.Empty;
StringBuilder Output;
List<string> Emails;

using (TextReader tr = new StreamReader(InputPath))
{
    Text = tr.ReadToEnd();
}

MatchCollection Matches = Regex.Matches(Text,EmailRegex);

foreach (Match m in Matches)
{
    Emails.Add(m.ToString().Trim()); // one error is here
}

foreach (String s in Emails)
{
    Output.Append(s + ","); // the other error is here
}

using (TextWriter tw = new StreamWriter(OutputPath))
{
    tw.Write(Output.ToString());
}
} 
static void Main(字符串[]args)
{
字符串InputPath=@“C:\Temp\excel.txt”;
字符串OutputPath=@“C:\Temp\emails.txt”;
(3)以下::::::(((::::((:::::((::::((:::[[a-扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎9 9九九九九九九九九九九九点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点(?:[a-zA-Z]){2,}\.?)$”;
string Text=string.Empty;
StringBuilder输出;
列出电子邮件;
使用(TextReader tr=新的StreamReader(InputPath))
{
Text=tr.ReadToEnd();
}
MatchCollection Matches=Regex.Matches(文本,EmailRegex);
foreach(匹配中的匹配m)
{
Emails.Add(m.ToString().Trim());//这里有一个错误
}
foreach(电子邮件中的字符串s)
{
Output.Append(s+“,”;//另一个错误在这里
}
使用(TextWriter tw=新的StreamWriter(OutputPath))
{
Write(Output.ToString());
}
} 
很抱歉格式化。。。我时间有点紧


编辑:哇。我是个白痴-一定是因为我时间紧迫

您没有初始化StringBuilder和列表

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<String>();
StringBuilder输出=新建StringBuilder();
列表电子邮件=新列表();
问题在于:

StringBuilder Output;
List<string> Emails;

您没有创建
Stringbuilder
或电子邮件列表:

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>(); 
StringBuilder输出=新建StringBuilder();
列表电子邮件=新列表();
您的“输出”和“列表”变量未分配对象实例。更改:

StringBuilder Output;
List<string> Emails;
StringBuilder输出;
列出电子邮件;

StringBuilder输出=新建StringBuilder();
列表电子邮件=新列表();

您必须使用“新建”来初始化电子邮件和输出对象。基本上有:

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
StringBuilder输出=新建StringBuilder();
列表电子邮件=新列表();

正如许多人所说,错误来自您没有创建的对象

但是,为什么要将电子邮件地址存储在临时列表中,然后将其放入临时字符串中,然后将其写入文件?只需将它们直接写入文件:

static void Main(string[] args) {

   string InputPath = @"C:\Temp\excel.txt";
   string OutputPath = @"C:\Temp\emails.txt";
   string EmailRegex = @"^(?:[a-zA-Z0-9_'^&amp;/+-])+(?:\.(?:[a-zA-Z0-9_'^&amp;/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$";

   using (TextWriter tw = new StreamWriter(OutputPath))
      foreach (Match m in Regex.Matches(File.ReadAllText(InputPath), EmailRegex)) {
         tw.Write(m.Value);
         tw.Write(',');
      }
   }
}
注意:正则表达式似乎在某个地方被破坏了。有一些
&可能应该是
&
字符

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
static void Main(string[] args) {

   string InputPath = @"C:\Temp\excel.txt";
   string OutputPath = @"C:\Temp\emails.txt";
   string EmailRegex = @"^(?:[a-zA-Z0-9_'^&amp;/+-])+(?:\.(?:[a-zA-Z0-9_'^&amp;/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$";

   using (TextWriter tw = new StreamWriter(OutputPath))
      foreach (Match m in Regex.Matches(File.ReadAllText(InputPath), EmailRegex)) {
         tw.Write(m.Value);
         tw.Write(',');
      }
   }
}