2013-04-16 43 views
-4

此代碼:NullReference在for循環

public void collide(int x, int y) 
{ 
    int foodthen=0; 
    for(int xt=0;xt<150;xt++) 
    { 
     for(int yt=0;yt<55;yt++) 
     { 
~  if(MainClass.tilesSet[yt,xt].food=true) 
     { 
      foodthen++; 
     } 
     } 
    } 
    Debug.WriteLine("Food then: "+foodthen); 
    if(this.Equals(MainClass.fridge)||this.Equals(MainClass.tree)) 
    { 
     if(MainClass.tilesSet[y,x].food) 
     { 
     MainClass.tilesSet[y,x].food=false; 
     MainClass.Log("You found some food!"); 
     MainClass.player.food++; 
     } 

     else 
     { 
     MainClass.Log("There is no food... :("); 
     } 
    } 
    MainClass.player.updateFood(); 
} 

這引發在標有 '〜' 行一個NullReferenceException。與用'#'標記的行相同的代碼似乎沒問題,當我在沒有引發代碼的情況下測試時,沒有發生異常。爲什麼只有在for循環中才會發生?

+0

你,顯然是引用一個位置出界?我不知道..代碼對我來說很陌生。 – 2013-04-16 16:41:28

+1

我可能會失明。標有#的線在哪裏? – Melanie

+0

那是什麼語法? – karthikr

回答

2

這意味着MainClass,MainClass.tilesSetMainClass.tilesSet[yt,xt]null。假設MainClass實際上是一個類,它不能是null,所以最有可能是其他兩個之一。我最好的猜測是多維數組未被完全初始化,並且包含一些空引用。發生異常時使用ytxt的調試器to inspect the value

如果ytxt都是0,MainClass.tilesSetMainClass.tilesSet[0,0]爲空。對於任何其他值,這是數組未完全填充的問題。

而且,請注意,在該行的代碼你分配true的財產(或領域)food,不檢查,對true。這很可能不是你想要的。

if(MainClass.tilesSet[yt,xt].food=true) 

應該是:

if(MainClass.tilesSet[yt,xt].food) 
0

如果你得到一個NullReferenceException那麼這將表明tilesSet陣列尚未初始化。如果循環引用的索引超出了範圍,那麼你會得到一個異常,但是你得到的異常是告訴你,你正在請求一個不存在的數組對象。

我會看看在調用collide方法時,MainClass的屬性是如何初始化的。