2016-06-30 29 views
-1

我有我的asp.net mvc的類中的以下方法: -對象引用需要非靜態字段,方法或屬性

public class Crud 
{ 
    Repository repository = new Repository(); 

    List<string> activeTech = repository.getAll().ToList(); 

,但我得到以下異常: -

Error 1 An object reference is required for the non-static field, method, or property 

但如果添加靜態到我的代碼如下,異常將被刪除: -

public class Crud { 
    static Repository repository = new Repository(); 

    List<string> activeTech = repository.getAll().ToList(); 

所以CA ñ任何人的建議,請這?

謝謝

+2

當然,你會希望你的第二個陳述在方法中? –

回答

3

類的字段的初始化直接在您的構造函數的代碼執行之前完成。目前還沒有this參考。

所以場的初始化是在靜態上下文中執行,你是不是允許訪問類的任何其他實例成員。

爲了解決這個問題,你可以移動的activeTech初始化您的構造函數中:

public class CRUD 
{ 
    Repository repository = new Repository(); 
    List<string> activeTech; 

    public CRUD() 
    { 
     activeTech = repository.getAll().ToList(); 
    } 
} 

,因爲當時的構造函數代碼被執行,一個this引用是訪問,你在一個靜態已不再上下文。


注意的是,類名CRUD不匹配,C#命名約定暗示UpperCamelCase(Crud)類名。

+0

那麼爲什麼添加靜態將解決問題? –

+1

@JohnJohn,因爲'靜態'成員__可以在靜態'上下文中訪問。 –

+0

我感到困惑的問題是,當我向我的共享方法和變量添加斷點時,我使用Visual Studio運行我的項目時,Visual Studio將永遠不會停在與靜態成員有關的任何斷點處,因此很難爲了理解流程是如何進行的,那麼是否有一個特定的原因,VS永遠不會停留在與靜態成員相關的斷點上? –

相關問題