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{}
цикл будет прерываться на первой пустой строке вместо того, чтобы просто отбрасывать ее. В этом примере это исправлено, и оно сломается только тогда, когда больше нет строк для чтения.