You declared an array of things: Thing[] thing, but you never instantiated it, so the foreach loop would throw a null reference exception. And as George said, you never added the new Things you created into the array.
so if you change
Thing[] thing
to
const in MaxThings = 30;
int currentThingCount = 0;
Thing[] thing = new Thing[MaxThings];
and in Update
if (currentThingCount < MaxThings - 1)
{
Thing x = new Thing();
thing[currentThingCount++] = x;
// setup x location here
}
that should work.
but as George said, Lists are better in that you don't need to manage their size;
so above could be rewritten as
List<Thing> things = new List<Thing>();
and in Update
Thing x = new Thing();
things.Add(x);
which is less code (3 lines instead of 8), easier to read, and less prone to bugs.
p.s., i think it's better to name arrays, lists etc using plural (things rather than thing) as it more natural language.