null referance when adding to a list please help

i have a small piece of code that just wont work whatever way ive tried it, its probably really simple but pulling my hair out now lol so any help appreciated

the issue is when looping through i want to add the objects to a new list but everytime i do i get a null referance exception

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class TileGenerator : MonoBehaviour {

	public TerrainTiles[] terrainTiles;
	public List<Zone> weightedTiles;
	float totalWeight;

	[System.Serializable]
	public struct TerrainTiles{
		public string name;
		public TerrainTile[] tiles;
	}

	[System.Serializable]
	public struct TerrainTile{
		public GameObject tile;
		public int weight;
	}

	[System.Serializable]
	public struct Zone{
		 public List<GameObject> tiles;
	}
	public void SetTileWeights()
	{
		List<Zone> weights = new List<Zone> ();
		for (int i = 0; i < terrainTiles.Length; i++) 
			{
				weights.Add (new Zone ());
				for (int j = 0; j < terrainTiles *.tiles.Length; j++)* 
  •  			{*
    
  •  				List<GameObject> go = new List<GameObject> ();*
    

_ for (int k = 0; k < terrainTiles .tiles [j].weight; k++)_
* {*
_ GameObject tmpTile = terrainTiles .tiles [j].tile;
* go.Add (tmpTile);
Debug.Log (weights.Count + " " + i);
}
weights .tiles.AddRange (go);
}
}
}*_

* public GameObject GetTile(int zone){*
* return weightedTiles [zone].tiles [Random.Range (0, weightedTiles [zone].tiles.Count)];*
* }*
}

the line weights*.tiles.addRange(go) is the one throwing the error and i cant figure out for the life of me why?*
again any help appreciated

it’s because Zone is a struct, and as such its members are not automatically initialized. so tiles is null in there.

change this:

weights.Add (new Zone ());

to something like this:

Zone z = new Zone();
z.tiles = new List< GameObject >();
weights.Add(z);

also, in the general advice department,
there are a couple ways to figure out these types of issues when they come up.
one is to use the debugger in MonoDevelop, stick a breakpoint on the line w/ the problem, and then inspect all the variables involved.

another is to just add print statements.
eg, if your problem line is weights<em>.tiles.addRange(go), then print out weights. is it null ? if not then print out weights_. is it null ? if not, then print out weights*.tiles, and so on.*_