懒洋洋地设置财产时更好的解决方案



我有很多类似于以下的代码,这些代码用于懒惰地加载属性并避免重新提高。

我知道有关属性的最近C#版本有很多变化,但是我找不到任何会否定此类需求的东西。

现在是否有一种更好的处理这种情况的方法,还是这仍然是要走的路?

private string _answer;
public string Answer => _answer ?? (_answer = GetAnswer());
private string GetAnswer()
{
    var answer = "";
    return answer;
}

明显的选择是 Lazy<T>

private Lazy<string> _answerLazy = new Lazy<string>(() => "answer");
public string Answer => _answerLazy.Value;

您可以忽略该方法并使用懒惰动作。另外,Lazy<T>还有线程安全的选项,我更喜欢。另外,评估null并不意味着它继续计算"新"值。

如果Lazy<T>的优势不足以使您移动,只需继续使用您的工作即可。写作可能很麻烦,并且更容易出错,但是它将起作用。

最新更新