C # List или TextReader лимит? - PullRequest
0 голосов
/ 28 июля 2010

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

   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 ]

2 голосов
/ 28 июля 2010

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

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

1 голос
/ 28 июля 2010

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

0 голосов
/ 28 июля 2010

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

0 голосов
/ 28 июля 2010

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

...