Soy un principiante en c# y me sale un ‘Sistema.NullReferenceException de error». He buscado por todas partes pero me parece que no puede encontrar una solución útil.
He simplificado el código de abajo, de modo que sería más claro.

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.
        }
    }
}

El Azulejo de la clase se muestra a continuación

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

Podría alguien ayudarme?

InformationsquelleAutor user2399399 | 2013-05-19

3 Comentarios

  1. 2

    Se ha declarado un array para almacenar el icono de objetos para las dimensiones necesarias, pero cada ranura de esta matriz es NULO, no se puede hacer referencia a un NULL, intentando asignar a la propiedad active

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

    y necesita un código como este para cada Mosaico que se va a almacenar en la matriz

  2. 2

    Primero inicializar tile[x, y]

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

    Para Inicializar todos los elementos de la matriz se puede crear un método de utilidad

     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;
        }

    y usarlo como

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

    Un System.NullReferenceException se produce cuando intenta realizar una operación de un objeto que no existe (tiene un valor de null) – en este caso el icono en la posición 1,1 en la matriz no existe, sin embargo, por lo que la matriz almacena el valor null en lugar de una referencia adecuada.

    Usted necesita para crear instancias de todos los elementos de las Baldosas de la matriz antes de intentar el uso de ellos. cuando se crea la matriz de todos ellos tienen el defecto null valor porque no hay ningún objeto en el montón de referencia, sin embargo en.

    Esto se hace simplemente después de crear la matriz si desea crear todas las fichas a la vez:

    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
        }
    }

    Solo para que lo sepas, C# utiliza Cero-matrices Indexadas, así que el primer elemento de la matriz es en realidad tile[0, 0]: Más acerca de las matrices en el MSDN C# Matrices Tutorial si deseas leer más. Lo siento si ya lo sabía!

Dejar respuesta

Please enter your comment!
Please enter your name here