c# - 懒惰设置属性时更好的解决方案
问题描述
我有很多类似于以下的代码,用于延迟加载属性并避免代价高昂的重新获取。
我知道最近的 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>
不足以让你转向它,那就继续使用你所做的。写起来可能很麻烦,而且更容易出错,但它会起作用。
推荐阅读
- mongodb - MongoDB中基于嵌套数组元素对记录进行排序
- c - 在 pthreads start_routine 函数中声明数组导致分段错误
- pytorch - 具有策略和目标网络的 DQN 在 LunarLander 环境中无法正确学习
- swift - 带有 Addsubview 的 Dynamice tableview 单元
- reactjs - 图像未通过反应加载到服务器端渲染中
- python - 是否可以在状态中显示我的不和谐机器人在哪个频道/它正在播放什么歌曲?
- python - 有没有一种特殊的方法可以用python3从json文件中读取url?
- angular - 在同一组件角度的数据之间切换
- mariadb - 在关系数据库中存储具有多个值的属性
- python - 如何在python中小写字符串并将空格更改为下划线?