延迟设置属性时的更好解决方案

时间:2019-05-01 11:25:53

标签: c# properties

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

我知道最近的c#版本在属性方面已经进行了很多更改,但是我找不到能够消除对此类要求的任何东西。

现在是否有更好的方法来处理这种情况,或者这仍然是可行的方法?

private string _answer;

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

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

1 个答案:

答案 0 :(得分:0)

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

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

public string Answer => _answerLazy.Value;

您可以省略该方法,而使用惰性动作。另外,Lazy<T>具有线程安全性选项,我希望这样做。同样,评估为null并不意味着它一直在计算“新”值。

如果Lazy<T>的优势不足以让您继续使用它,只需继续使用所做的工作即可。编写起来可能很麻烦,而且容易出错,但是可以使用。