No LINQPad reutilización la semilla aleatoria entre consultas

s952163:

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

Thomas Weller:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=369937&siteId=1
Recomendado
Clasificación