Какие преимущества предлагает Lazy <T>по сравнению со стандартным экземпляром Lazy? - PullRequest
12 голосов
/ 25 июля 2011

Рассмотрим этот пример, он показывает два возможных способа отложенной инициализации. Есть ли какие-то преимущества использования Lazy здесь, кроме поточно-ориентированного?

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:

Пожалуйста, рассмотрите приведенный выше код как простой пример, типы данных не имеют значения, смысл здесь в том, чтобы сравнить Lazy со стандартной ленивой инициализацией.

1 Ответ

5 голосов
/ 25 июля 2011

Это семантически более правильно.

Когда вы используете Nullable<decimal>, вы говорите, что значение null будет означать «неоцененное» состояние.Хотя это обычное преобразование, оно все же произвольно.Есть миллион других способов интерпретации null, поэтому вам, вероятно, следует где-то объяснить (в документации или, по крайней мере, в комментарии), что в данном случае означает нуль.

Напротив, когда вы используете Lazy<decimal>, ваши намерения ясны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...