2016-06-28 56 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

是的。但我仍然想知道为什么错误的原因。 –