首页 > 解决方案 > 懒惰设置属性时更好的解决方案

问题描述

我有很多类似于以下的代码,用于延迟加载属性并避免代价高昂的重新获取。

我知道最近的 c# 版本在属性方面发生了很多变化,但我找不到任何可以否定这种需求的东西。

现在有没有更好的方法来处理这种情况,或者这仍然是要走的路?

private string _answer;

public string Answer => _answer ?? (_answer = GetAnswer());

private string GetAnswer()
{
    var answer = "";
    return answer;
}

标签: c#properties

解决方案


显而易见的选择是Lazy<T>

private Lazy<string> _answerLazy = new Lazy<string>(() => "answer");

public string Answer => _answerLazy.Value;

您可以省略该方法并改用惰性操作。此外,Lazy<T>还有我更喜欢的线程安全选项。此外,评估为null并不意味着它一直在计算“新”值。

如果它的优势Lazy<T>不足以让你转向它,那就继续使用你所做的。写起来可能很麻烦,而且更容易出错,但它会起作用。


推荐阅读