Pregunta

Considere este ejemplo, muestra dos posibles formas de inicialización perezosa. Excepto por ser seguro de hilo, ¿hay ventajas específicas de usar lazyu003CT> ¿aquí?

class Customer {
    private decimal? _balance2;
    private static decimal GetBalanceOverNetwork() {
        //lengthy network operations
        Thread.Sleep(2000);
        return 99.9M;
    }

    public decimal? GetBalance2Lazily() {
        return _balance2 ?? (_balance2 = GetBalanceOverNetwork());
    }

    private readonly Lazy<decimal> _balance1 = new Lazy<decimal>(GetBalanceOverNetwork);

    public Lazy<decimal> Balance1 {
        get { return _balance1; }
    }
}

ACTUALIZAR:

Considere el código anterior como un ejemplo simple, los tipos de datos son irrelevantes, el punto aquí es comparar perezosou003CT> sobre inicialización perezosa estándar.

¿Fue útil?

Solución

Es semánticamente más correcto.

Cuando usas el Nullable<decimal>, lo que dices es que el valor de null defenderá el estado "no evaluado". Aunque esta es una conversión común, sigue siendo arbitraria. Hay millones de otras formas de interpretar null, por lo que probablemente debería explicar en algún lugar (en la documentación o al menos como comentario) qué significa NULL en este caso.

Por el contrario, cuando usas Lazy<decimal>, tus intenciones son claras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top