2013-08-17 69 views
0

我是C#的新手,通過C#Head First書中的一些示例工作並試圖應用我以實際的方式學習了。我想在下面的代碼的文本文件閱讀:雖然循環警告始終爲真,因爲類型'int'的值永遠不會等於'int'類型的'null'

private StreamReader upload; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (File.Exists(@"C:\Users\Recon 5\Desktop\ToDo.txt")) 
    { 
     upload = new StreamReader(@"C:\Users\Recon 5\Desktop\ToDo.txt"); 
     while (upload.Peek() != null) 
     { 
      currentTasks.Items.Add(upload.ReadLine()); 
     } 
     upload.Close(); 
    } 
} 

上面的代碼提供了預期的結果,即從文本文件添加項目到一個列表框。我不明白的是,爲什麼下面的表達式:

upload.Peek() != null 

是給我下面的編譯器警告:

表達式的結果總是true因爲int類型的值是永遠等於intnull

我試圖尋找在Windows library的迴應,但瞭解的API是在自己的權利的任務。

我想我正在尋找的是指導我的搜索或資源來幫助我自己發現答案的指針。我確信有可能有更好的方式來編寫這個任務,但考慮到我對語言的理解,我認爲使用和理解迄今爲止學到的工具很重要,在這種情況下,while循環。

+0

我想你應該先學習值與參考類型之間的區別。另外 - IntelliSense'Peek()'文檔應該告訴你它可以返回什麼值,所以你可以知道會發生什麼。 – Tarec

+0

@塔雷克,我很欣賞這個方向。再次感謝IntelliSense你的權利,它確實表明返回類型的int,再次感謝。 – TargetofGravity

回答

6
while (upload.Peek() != null) 

...看起來可疑,因爲StreamReader.Peek()不能返回null。我懷疑正確的路線是;

while (upload.Peek() != -1) 

返回值
類型:System.Int32
表示下一個字符一個整數要讀取或-1,如果有要讀取任何字符,或者如果流不支持查找。

+0

Gotcha,實際上現在你指出,我挖入reader.peek並發現int錯誤來自於此,它返回一個整數值,然後確定文件中是否有其他內容。所以我假設是否有額外的字符,它會返回0,如果不是,那麼-1會停止循環? – TargetofGravity

+0

@TargetofGravity它返回下一個字符的整數值,如果流中沒有下一個字符,則返回-1,因此如果要讀取整個流,則只需循環,直到它返回-1。 –

相關問題