OK, quick crash course on computer random numbers:
Random number generators aren’t truly random; they do complicated mathematical operations to produce a series of numbers that “look” random. But if you manage to get two random number generators in sync, then they will produce the same series of numbers forever.
To avoid getting in sync (or to guarantee it, if that’s what you want), you typically start off your random generator with a special value called the “seed”. Two generators that use the same algorithm and the same seed will produce the same output, but if you give them unrelated seeds their output will generally look unrelated.
If you want, when you create a new C# System.Random object, you can specify a seed value. (This is great if you want to make things happen the same every time, e.g. for debugging or so that your friend can play the same procedurally-generated level that you just played.)
If you don’t choose to specify a seed value, the system gives you one automatically…based on the current time.
This is generally a pretty good option, as it means if you quit the program and run it again, you will get a different seed. But if you create a bunch of copies of System.Random all at the same time, they tend to look the same.
Generating good seeds is tricky. Rather than trying to come up with a bunch of good seeds for a bunch of different random number generators controlling different parts of your game, usually it’s better to have just one random number generator that is shared by all the different things in your game that need random numbers. That way you only need one seed (and using the time is generally a fine way to get one, at least for gaming).
This is such a common thing to do, that Unity actually does it for you automatically: If you use UnityEngine.Random instead of System.Random, they have a single, globally-visible random number generator that they seed automatically and can be shared across your whole application.
But if you want to use System.Random instead, you probably want to use a single shared copy for everything that needs random numbers (unless you are trying to control the seed in some special way). The easiest way to do this is to put it in a static variable somewhere during your program’s initial start-up.