2013-08-26 119 views
0

以下代碼在調用GetDepAirport()方法時會引發「在System.NullReferenceException中發生未處理的類型異常...」。公共類成員的NullReferenceException

public WYPT GetDepAirport() 
    { 
     Console.WriteLine("Retrieving Airport in GetDepApt()"); 
     Console.WriteLine("Departure Airport is {0}", Dep.Ident); 
     return Dep; 
    } 

    public void SetDepAirport(String ident) 
    { 
     Console.WriteLine("Setting Airport with ident {0}, ident"); 
     Dep = FetchDBAirport(ident); 
     Console.WriteLine("WYPT Dep is set to {0}", Dep.Ident); 
    } 

的輸出是:

Setting Airport with ident KABQ 
WYPT Dep is set to KABQ 
Retrieving Airport in GetDepApt() 

其次例外的蛻。我不知道爲什麼當從GetDepAirport()方法調用時,爲什麼Dep(已公佈)返回爲null。這兩種方法都是從同一個類中的一個單獨的方法中調用的。

宣言是在類的頂部:

class FlightPlan 
{ 
    //Init Pg.1 data 
    public WYPT Dep, Dest, Altn; 

設置呼叫來自不同的類:

FlightPlan FPlan = new FlightPlan(); 
FPlan.SetDepAirport(Dep); 

獲取電話打進來後:

public void GetFPlan() 
    { 
     for (int i = 0; i < 14; i++) 
     { 
      Waypoint[i] = new WYPT(); 
     } 
     Waypoint[0] = GetDepAirport(); 
     Waypoint[1] = DISCON; 

同一FlightPlan類中的FetchDBAirport方法

private WYPT FetchDBAirport(String airport) 
    { 
     WYPT Airport = new WYPT(); 

     String databasepath = "C:\\Users\\Family\\documents\\visual studio 2012\\Projects\\FMST\\FMST\\Database\\NavData.mdf"; 
     SqlConnection myConnection = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=" + databasepath + ";Integrated Security=True"); 
     try 
     { 
      myConnection.Open(); 
      SqlCommand cmd = myConnection.CreateCommand(); 
      cmd.CommandText = "SELECT * FROM Airports WHERE Ident='" + airport + "';"; 
      SqlDataReader rdr = cmd.ExecuteReader(); 
      rdr.Read(); 

      Airport.Ident = (String)rdr.GetValue(0); 
      Airport.Lat = (decimal)rdr.GetValue(2); 
      Airport.Lon = (decimal)rdr.GetValue(3); 
      Airport.Elev = (decimal)rdr.GetValue(4); 

      myConnection.Close(); 
      return Airport; 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString() + "Happy Face"); 
      String ErrorMsg = "NOT FOUND"; 
      Airport.Ident = ErrorMsg; 
      return Airport; 
     } 
+0

你不向我們展示你在哪裏或如何宣佈它。 – OneFineDay

+0

Dep不會在提供的代碼中設置。我們需要更多信息。 –

+1

也許它是'FetchDPAirport(ident);'返回null。 – ismellike

回答

1

在GetDepAirport中返回NullReferenceException的代碼的唯一部分是Dep.IdentDepIdent可能爲空。如果你爲這兩者添加一個空檢查,那麼該方法將運行正常。

至於爲什麼無論是那些爲空,則可能是因爲:

  • 您還沒有叫SetDepAirport調用GetDepAirport
  • FetchDBAirport之前要麼返回null,或者Ident爲null返回Dep實例。
  • 調用GetDepAirport正確改變德普的其他地方
  • 德普不存儲值值的代碼 - 在屬性定義所以可能有問題
+0

我正在設置機場,並使用Console.WriteLine來驗證數據是從數據庫中設置的(Fetch ...)。我正在調查你最後的兩顆子彈,因爲我正在認真地抓住這顆子彈。 –

+0

我認爲上面列出的四個項目符號是一組邏輯上完整的原因 - 它必須是其中的一個! –

+0

我發現問題與範圍有關。一旦調用SetDepAirport()方法的方法結束,Dep變量將返回爲空。 –

相關問題