2014-03-13 46 views
0

當我運行windows窗體應用程序時,它顯示initializer cannot reference the nonstatic field method or property字段初始值設定項不能引用c中的非靜態字段方法或屬性錯誤#

string lia = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
StreamReader fileitem=new StreamReader(Path.Combine(lia,"dataset.txt")); //Error line 

我瘦,它無法識別lia爲字符串。 有什麼想法?

+1

你確定這兩條線是緊跟在一起嗎? – nvoigt

回答

6

我瘦了,它不能識別lia爲字符串。

不,它認識到它很好 - 但正如錯誤所述,您不能在初始化器中爲另一個使用一個實例變量的值。

的簡單的解決辦法通常是把在構造函數初始化,而不是:

public class Foo 
{ 
    // TODO: Fix names to be more conventional and friendly 
    string lia = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    StreamReader fileitem; 

    public Foo() 
    { 
     fileitem=new StreamReader(Path.Combine(lia,"dataset.txt")); 
    } 
} 

在另一方面,目前還不清楚這些應該是場在所有...我們沒有足夠的上下文可以肯定,但也許你應該考慮這些應該是本地變量中的一個方法,而不是在類中聲明的實例字段?

+0

謝謝。如果我想稍後使用「fileitem」,我應該怎麼做@Jon Skeet?因爲我得到「名稱fileitem不存在於當前的情況下」? – user3403967

+0

@ user3403967:那麼在這種情況下,你*會希望它成爲一個字段......但通常需要處理的變量是一個糟糕的主意。你能否讀取構造函數中的所有內容,並將其存儲爲字符串?很難在沒有更多背景的情況下了解最佳方法,但在某種程度上,這確實超出了問題的範圍。希望我的答案解決了你的直接問題。 (如果你收到錯誤信息*,即使它是一個字段,那麼我們需要更多的上下文 - 而且你應該問一個新的問題,理想情況下用一個簡短的代碼示例。) –

+0

無論如何,謝謝@JonSkeet – user3403967

相關問題