C# Список или TextReader лимит?

Я пытаюсь создать словарную игру, и у меня есть текстовый файл с примерно 100000 слов в каждой строке. У меня есть этот код:

   words = new List<Word>();
   Console.WriteLine("Please wait, compiling words list...");
   TextReader tr = new StreamReader(DICT);
   string line = tr.ReadLine();
   while (line != "" && line != null) {
    words.Add(new Word(line));
    line = tr.ReadLine();
   }
   Console.WriteLine("List compiled with " + words.Count + " words.");

Тем не менее, он останавливается на 40510 слов. Почему это? И как я могу снять проблему?

Спасибо.

4 ответа

Решение

Изменить: Извините; Я проверил наличие пустых строк в блокноте и не нашел ни одной; поиск в Notepad++ нашел их.

Мой плохой, спасибо в любом случае.

Это просто останавливает или выдает исключение? Проверьте line значение переменной в отладчике перед вызовом Console.WriteLine, возможно, там пустая строка.

Проблема в вашей линии!= "" Проверьте. Удалите это, и это будет продолжаться.

Проблема, кажется, ваша while{} петля.

Я бы сделал что-то вроде этого:

words = new List<Word>(); 
Console.WriteLine("Please wait, compiling words list..."); 
TextReader tr = new StreamReader(DICT); 
string line;
while((line = tr.ReadLine()) != null)
if(!string.IsNullOrEmpty(line.Trim()))
{ 
 words.Add(new Word(line)); 
} 
Console.WriteLine("List compiled with " + words.Count + " words.");

Я не проверял это, поэтому могут быть некоторые ошибки, но главное, что ваш while{} цикл будет прерываться на первой пустой строке вместо того, чтобы просто отбрасывать ее. В этом примере это исправлено, и оно сломается только тогда, когда больше нет строк для чтения.

Другие вопросы по тегам