簡體   English   中英

控制台應用程序中的“非靜態字段需要對象引用”錯誤

[英]'Object reference is required for non-static field' error in console application

我在控制台應用程序中收到以下語法錯誤:

非靜態字段、方法或屬性“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();
      }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM