2016-06-28 88 views
-4

我知道它是common error。但我想知道爲什麼我的代碼給出了這個錯誤。爲什麼給出錯誤CS0120

的VS提供了錯誤CS0120 C#的對象引用是所必需的非靜態字段,方法或屬性

class LoginsAtivosDAO 

     public static List<LoginAtivo> getList() { 
     return contexto.LoginsAtivos.ToList(); 
    } 

class List_Users_Form 

private void atualizaLista() { 
     LoginDao dao = new LoginDao(); 
     List<string> lista = new List<string>(); 
     foreach(LoginAtivo u in LoginsAtivosDao.getList()) { 
      lista.Add(dao.getUsuario(u.UsuarioID).Nome); 
     } 

     listBox1.DataSource = lista; 
    } 
+0

什麼是'contexto.LoginsAtivos'它定義在哪裏? –

+0

它是一個'DBContext',它是在類'LoginsAtivosDAO'中定義的。 –

+0

你不瞭解什麼?您是否閱讀過您鏈接的文檔? – Blorgbeard

回答

0

顯然你有一個叫做LoginsAtivosDAO的類和一個名爲LoginsAtivosDao的變量(不管是拼寫錯誤還是其他)。

但是會員contexto似乎會導致您的問題。它應該在你的班級中是靜態的LoginsAtivosDAO

class LoginsAtivosDAO 
{ 
    static DBContext contexto = ...; 

    public static List<LoginAtivo> getList() 
    { 
     return contexto.LoginsAtivos.ToList(); 
    } 
} 

class List_Users_Form 
{ 
    private void atualizaLista() { 
     LoginDao dao = new LoginDao(); 
     List<string> lista = new List<string>(); 
     foreach(LoginAtivo u in LoginsAtivosDao.getList()) { 
      lista.Add(dao.getUsuario(u.UsuarioID).Nome); 
     } 
     listBox1.DataSource = lista; 
    }  
} 
1

貌似contexto.LoginsAtivos是一個非靜態字段/屬性和您正試圖在靜態方法內訪問它們。這種操作是不允許的。你可以通過兩種方式避免這種情況:

  1. 從方法簽名刪除static關鍵字:

    public List<LoginAtivo> getList() 
    { 
        return contexto.LoginsAtivos.ToList(); 
    } 
    
  2. contexto.LoginsAtivos靜態。

注:如果你花一些時間來閱讀attached link的問題,那麼這個問題將不會提高。答案在此清楚地表述爲「爲了使用非靜態字段,方法或屬性,您必須先創建一個對象實例。」

+0

上面的代碼顯示了我爲該類的函數getList()所做的唯一調用。理論上,我不改變變量 –

+0

@VictorHenrique:你有沒有嘗試從方法簽名中移除靜態? –

+0

是的。但我仍然想知道爲什麼錯誤的原因。 –