为什么给出错误CS0120

时间:2016-06-28 03:53:06

标签: c#

我知道它是common error。但我想知道为什么我的代码会出现此错误。

  

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;
    }

2 个答案:

答案 0 :(得分:1)

看起来contexto.LoginsAtivos是一个非静态字段/属性,您试图在静态方法中访问它们。不允许这样的操作。您可以通过两种方式避免这种情况:

  1. 从方法签名中删除static个关键字:

    public List<LoginAtivo> getList() 
    {
        return contexto.LoginsAtivos.ToList();
    }
    
  2. contexto.LoginsAtivos设为静态。
  3.   

    注意:如果您花一些时间阅读问题的attached link,则此问题不会引发。答案在那里清楚地说明为&#34;为了使用非静态字段,方法或属性,您必须首先创建一个对象实例。&#34;

答案 1 :(得分:1)

显然,你有一个名为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;
    }       
}