我有很多类似于以下代码,用于延迟加载属性并避免昂贵的重新获取。
我知道最近的c#版本在属性方面已经进行了很多更改,但是我找不到能够消除对此类要求的任何东西。
现在是否有更好的方法来处理这种情况,或者这仍然是可行的方法?
private string _answer;
public string Answer => _answer ?? (_answer = GetAnswer());
private string GetAnswer()
{
var answer = "";
return answer;
}
答案 0 :(得分:0)
显而易见的选择是Lazy<T>
:
private Lazy<string> _answerLazy = new Lazy<string>(() => "answer");
public string Answer => _answerLazy.Value;
您可以省略该方法,而使用惰性动作。另外,Lazy<T>
具有线程安全性选项,我希望这样做。同样,评估为null
并不意味着它一直在计算“新”值。
如果Lazy<T>
的优势不足以让您继续使用它,只需继续使用所做的工作即可。编写起来可能很麻烦,而且容易出错,但是可以使用。