我有很多类似于以下的代码,这些代码用于懒惰地加载属性并避免重新提高。
我知道有关属性的最近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>
的优势不足以使您移动,只需继续使用您的工作即可。写作可能很麻烦,并且更容易出错,但是它将起作用。