Помогите с простой ошибкой C #

2

Я пишу эту небольшую программу, чтобы извлечь любое количество адресов электронной почты из текстового файла. Я получаю две ошибки: "Использование неназначенной локальной переменной". и я не уверен, почему.

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());
}
} 

Извините за форматирование... Я как бы надавил на время!

Изменить: WOW. Я идиот - должно быть потому, что я нажимаю на время!!!!

  • 1
    Хотели бы вы, чтобы мы понизили вас, чтобы «наказать» за то, что вы «идиот»? ;) Кстати, когда нажата на время, помедленнее! Это твоя настоящая ошибка. (и нет, вы не идиот. мы все сделали эту ошибку хотя бы один раз)
  • 0
    90% времени вам просто нужно отойти от клавиатуры на 5 минут. Иди принеси чашку кофе. Протяжение. В любом случае это хорошо для тебя.
Теги:

6 ответов

22
Лучший ответ

Вы не инициализируете StringBuilder и List.

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<String>();
9

Проблема здесь:

StringBuilder Output;
List<string> Emails;

Вы не инициализировали Emails и Output. Попробуйте:

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
8

вы не создаете Stringbuilder или список электронной почты:

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>(); 
8

Переменные "Вывод" и "Список" не назначаются экземплярами объектов. Изменение:

StringBuilder Output;
List<string> Emails;

Для

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
4

Вы должны инициализировать объекты электронной почты и вывода, используя "новое". В основном есть:

StringBuilder Output = new StringBuilder();
List<string> Emails = new List<string>();
1

Как многие говорили, ошибки исходят от объекта, который вы не создали.

Но почему вы храните адреса электронной почты во временном списке, а затем помещаете их во временную строку, а затем записываете в файл? Просто напишите их прямо в файл:

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(',');
      }
   }
}

Примечание. Регулярное выражение, похоже, было повреждено где-то вдоль линии. В нем есть &amp;, которые, вероятно, должны быть просто &.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню