我知道它是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;
}
答案 0 :(得分:1)
看起来contexto.LoginsAtivos
是一个非静态字段/属性,您试图在静态方法中访问它们。不允许这样的操作。您可以通过两种方式避免这种情况:
从方法签名中删除static
个关键字:
public List<LoginAtivo> getList()
{
return contexto.LoginsAtivos.ToList();
}
contexto.LoginsAtivos
设为静态。注意:如果您花一些时间阅读问题的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;
}
}