Para que este código:
void Main()
{
var testRandom = new TestRandom();
testRandom.RandGen.Dump("Property1");
testRandom.RandGen.Dump("Property2");
TestRandom.rngStatic.Dump("Static field1");
TestRandom.rngStatic.Dump("Static field2");
testRandom.rngInstance.Dump("Instance field1");
testRandom.rngInstance.Dump("Instance field2");
}
// Define other methods, classes and namespaces here
class TestRandom
{
private static Random _rnd = new System.Random();
public static int rngStatic = _rnd.Next();
public int rngInstance = _rnd.Next();
public int RandGen => _rnd.Next();
}
Me sale el siguiente resultado en LINQPad:
propiedad1 167577867
Propiedad2 2076433106
Estática Campo1 1758463813
Estática Campo2 1758463813
Instancia Campo1 1875178546
Instancia Campo2 1875178546
Campo estático 1 y 2, instancia de campo de 1 y 2 muestran el mismo número aleatorio cuando se ejecuta en la misma consulta. Este es el esperado, sin embargo, incluso cuando vuelva a ejecutar la consulta, Instancia campos 1 y 2 seguirán mostrando el mismo número aleatorio como en carreras anteriores. Así que sospecho que la semilla es fija, pero no pudo confirmarlo.
Segundo ejecución de la consulta:
propiedad1 1860313679
Propiedad2 1472007479
Estática Campo1 1758463813
Estática Campo2 1758463813
Instancia Campo1 1370753000
Instancia Campo2 1370753000
No. ¿Por qué debería LINQPad tener un manejo especial para los números al azar que hace que sea incompatible con otras aplicaciones?
Se compilará cada consulta en un ensamblado independiente e inicializar las variables estáticas sólo una vez. Con el fin de descargar el montaje, que necesitaría para destruir el dominio de aplicación que contiene la asamblea.
De este modo, también podría haber sido posible que crea un dominio de aplicación por consulta y re-usos que dominio de aplicación para las siguientes ejecuciones. Pero con una comprobación de AppDomain.CurrentDomain
que no parece ser el caso. Así que tenemos 1 dominio de aplicación y varios ensamblados.
Puede confirmar esto poniendo una Console.WriteLine("Test");
en el código para que se necesita recompilación. Usted obtendrá un nuevo número.