'非静态字段需要对象引用'控制台应用程序出错

本文关键字:控制台 程序出错 对象引用 应用 字段 静态 | 更新日期: 2023-09-27 18:11:23

我在控制台应用程序中得到以下语法错误:

非静态字段、方法或属性'ConsoleApplication1.Program.db'需要对象引用

我该如何解决这个问题?我读过关于将db设置为静态的建议,但我不完全理解。

class Program
{      
    private CallContext db = new CallContext();
    private BreachContext bc = new BreachContext();
    static void Main(string[] args)
    {
        var snapshot = db.Calls.Where(x => x.team == "T1").ToList();

'非静态字段需要对象引用'控制台应用程序出错

您正在创建CallContext的实例,但仅当您创建Program的实例时。

然而,Main是静态的,不需要Program的实例,所以当Main运行时,db不会被实例化。

当你需要的时候,我只需要在 Main中实例化它。如果它是一次性的,您可以考虑将它也包装在using语句中。
static void Main(string[] args)
{
    var db = new CallContext();
    var snapshot = db.Calls.Where(x => x.team == "T1").ToList();

我假设你有一个很好的理由使它成为一个全局变量(也许你也在其他操作中使用它),所以如果你真的想要这个,db声明也应该是静态的:

 private static CallContext db = new CallContext();

原因:您在静态Main方法中使用了非静态db变量,这是不可能的。

然而,如果没有理由使它全局和静态,你也可以把声明和初始化放在Main方法本身,然后使用它。我假设 CallContext是一个实体框架上下文,所以在这种情况下,使用using语句来处理它:

 static void Main(string[] args)
 {
      using (var db = new CallContext())
      {
          var snapshot = db.Calls.Where(x => x.team == "T1").ToList();
      }
 }