2013-05-19 119 views
0

我是初學者,並且不斷收到'System.NullReferenceException'錯誤。我到處尋找,但我似乎無法找到有用的解決方案。 我簡化了下面的代碼,以便更清楚。未將對象引用設置爲對象的實例 - C#

namespace tile_test 
{ 
    public class Game1 : Game 
    { 
     public static float bottomWorld = 38400f; 
     public static float rightWorld = 134400f; 
     public static int maxTilesX = (int)rightWorld/16 + 1; 
     public static int maxTilesY = (int)bottomWorld/16 + 1; 


     public Game1() 
     { 
      Tile[,] tile = new Tile[maxTilesX, maxTilesY]; 
      int x = 1; 
      int y = 1; 
      tile[x, y].active = false; //Error on this line. 
     } 
    } 
} 

磁磚 - 類如下所示

namespace tile_test 
{ 
    public class Tile 
    { 
     public bool active; 
    } 
} 

任何人都可以幫我嗎?

回答

2

您已經聲明一個數組來存儲您的圖塊對象的尺寸需要,但這種陣列的每一個插槽爲NULL,你不能引用一個NULL試圖分配財產活躍

Tile[,] tile = new Tile[maxTilesX, maxTilesY]; 
int x = 1; 
int y = 1; 
tile[x, y] = new Tile() {active=false}; 

和你需要像這樣每瓦代碼,你計劃你的陣列中存儲

2

首先初始化tile[x, y]

tile[x, y] = new Tile(); 
tile[x, y].active = false; 

初始IZE您的數組中的所有元素,你可以創建一個實用方法

T[,] Create2DimArray<T>(int len1,int len2) where T: new() 
    { 
     T[,] arr = new T[len1, len2]; 
     for (int i = 0; i < len1; i++) 
     { 
      for (int j = 0; j < len2; j++) 
      { 
       arr[i, j] = new T(); 
      } 
     } 
     return arr; 
    } 

,並用它作爲

Tile[,] tile = Create2DimArray<Tile>(maxTilesX, maxTilesY); 
0

一個System.NullReferenceException被拋出當你試圖執行一個對象的操作不存在(值爲null) - 在這種情況下,數組中位置爲1,1的Tile尚不存在,因此該數組將存儲值爲null的適當引用。

在嘗試使用它們之前,您需要實例化Tiles數組中的所有項目。當您創建數組時,它們都具有默認值null值,因爲堆中沒有任何對象可供引用。

此,如果你想一次創建所有的瓷磚在創建陣列後做簡單:

for (int i = 0; i < maxTilesX; i++) 
{ // loop through "rows" of tiles 
    for (int j = 0; j < maxTilesY; j++) 
    { // loop through corresponding "column" of tiles 
     tile[i, j] = new Tile(); // create a Tile for the array to reference 
     tile[i, j].active = false; // some initialization 
    } 
} 

只要你知道,C#使用零索引數組,所以你的數組中的第一項實際上是tile[0, 0]:更多關於MSDN C# Arrays Tutorial上的數組的信息,如果您想了解更多信息。對不起,如果你已經知道這個!

相關問題