2010-07-28 52 views
0

我試圖做一個字典遊戲,並且我有一個文本文件,每行大約有100,000個單詞。我有這個代碼:C#List或TextReader限制?

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字。爲什麼是這樣?我該如何解除這個問題?

謝謝。

+0

我檢查了一個空行;但我怎麼能檢查空字符?編輯:Notepadd ++揭示更多... – Xenoprimate 2010-07-28 17:53:40

回答

2

編輯:對不起;我檢查記事本中的空行,發現沒有;在Notepad ++中搜索已經找到它們。

不好,謝謝。

+1

是的,不要使用記事本進行與編程有關的任何事情。將記事本++切換爲默認值。 – 2010-07-28 17:58:12

1

它只是停止或拋出異常?在Console.WriteLine調用之前,在調試器中檢查line變量值,可能是空行。

+0

同意。使用調試器! – driis 2010-07-28 17:58:48

0

問題是你的行!=「」檢查。刪除它,它會繼續。

0

問題似乎是您的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{}循環將打破第一個空行,而不是隻是丟棄它。在這個例子中,它被糾正了,只有當沒有更多的行要讀時纔會被破壞。