Frage

Betrachten Sie dieses Beispiel, es zeigt zwei mögliche Möglichkeiten der faulen Initialisierung. Gibt es nur bestimmte Vorteile, wenn er thread-sicher ist, faul zu verwendenu003CT> hier?

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

AKTUALISIEREN:

Bitte betrachten Sie den obigen Code als einfaches Beispiel: Datentypen sind irrelevant. Hier geht es darum, Lazy zu vergleichenu003CT> über Standard -Lazy -Initialisierung.

War es hilfreich?

Lösung

Es ist semantisch korrekter.

Wenn Sie das verwenden Nullable<decimal>, was Sie sagen, ist, dass der Wert von null wird für den "unegelegenen" Staat stehen. Obwohl dies eine häufige Konvertierung ist, ist es immer noch willkürlich. Es gibt Millionen andere Möglichkeiten zu interpretieren null, Sie sollten also wahrscheinlich irgendwo irgendwo (in der Dokumentation oder zumindest als Kommentar) erklären, was Null in diesem Fall bedeutet.

Im Gegenteil, wenn Sie verwenden Lazy<decimal>, Ihre Absichten sind klar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top