考虑到这个示例,它显示了两种可能的懒惰初始化方法。除了线程安全外,是否有使用懒惰的特定优势u003CT>这里?

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

更新:

请将上述代码视为一个简单的示例,数据类型无关紧要,这里的重点是比较懒惰u003CT>超过标准的懒惰初始化。

有帮助吗?

解决方案

它在语义上更正确。

当您使用 Nullable<decimal>, ,你说的是 null 将代表“未评估”状态。尽管这是一个普遍的转换,但仍然是任意的。还有其他数百万个解释的方法 null, ,因此您可能应该在这种情况下(在文档中或至少作为评论)解释某个地方的含义。

相反,当您使用 Lazy<decimal>, ,您的意图很明确。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top