Domanda

Considerate questo esempio, mostra due possibili modalità di inizializzazione ritardata. Tranne che per essere thread-safe, ci sono advantates specifiche di utilizzo Pigro qui?

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; }
    }
}

UPDATE:

Si prega di considerare al di sopra di codice come un semplice esempio, i tipi di dati sono irrilevanti, il punto qui è quello di confrontare Pigro di inizializzazione pigra su standard.

È stato utile?

Soluzione

E 'semanticamente più corretto.

Quando si utilizza il Nullable<decimal>, quello che dici è che il valore di null starà per lo stato "non valutata". Anche se questo è un comune di conversione, è ancora arbitrario. Ci sono milioni di altri modi di interpretare null, quindi probabilmente si dovrebbe spiegare da qualche parte (nella documentazione o almeno come commento) cosa significa nulli in questo caso.

Al contrario, quando si utilizzano Lazy<decimal>, le vostre intenzioni sono chiare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top