'非静态字段需要对象引用'控制台应用程序出错
本文关键字:控制台 程序出错 对象引用 应用 字段 静态 | 更新日期: 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
不会被实例化。
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();
}
}