当前位置: 首页 > news >正文

.NET/C# 避免调试器不小心提前计算本应延迟计算的值

延迟计算属性的值,应该很多小伙伴都经常使用。比如在属性的 get 方法中判断是否已初始化,如果没有初始化则立即开始初始化。

但这样的写法存在一个很大的问题——如果你使用 Visual Studio 调试,当你把鼠标划到对象的实例上的时候,属性就会立刻开始进行初始化。而此时对你的代码来说可能就过早初始化了。我们不应该让调试器非预期地影响到我们程序的执行结果。

本文介绍如何避免调试器不小心提前计算本应延迟计算的值。


方法是在属性上添加一个特性 DebuggerBrowsableAttribute

private Walterlv _foo;

[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public Walterlv Walterlv => _foo ?? (_foo = new Walterlv());

public bool IsInitialized => !(_foo is null);

当指定为不再显示的话,在调试器中查看此实例的属性的时候就看不到这个属性了,也就不会因为鼠标划过导致提前计算了值。

当然,如果你希望为你的类型定制更多的调试器显示方式,可以参考我的另一篇博客:

  • C#/.NET 调试的时候显示自定义的调试信息(DebuggerDisplay 和 DebuggerTypeProxy) - walterlv

参考资料

  • Lazy.cs

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 的字符串暂存池
  • 如何为 Win32 的打开和保存对话框编写文件过滤器(Filter)
  • C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性
  • 使用 ProcessMonitor 找到进程所操作的文件的路径
  • MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译
  • git 配置错误导致无法推送远端仓库?本文介绍各种修复方式
  • WPF 很少人知道的科技
  • WPF 程序的编译过程
  • 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)
  • .NET 的程序集加载上下文
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • Windows 10 解决无法完整下载安装语言包(日语输入法无法下载使用)
  • 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • docker python 配置
  • JS笔记四:作用域、变量(函数)提升
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Protobuf3语言指南
  • Redux 中间件分析
  • Shell编程
  • SQLServer之创建显式事务
  • vue-cli3搭建项目
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云应用高可用服务公测发布
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊聊sentinel的DegradeSlot
  • 全栈开发——Linux
  • 微信小程序--------语音识别(前端自己也能玩)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​低代码平台的核心价值与优势
  • ​渐进式Web应用PWA的未来
  • #HarmonyOS:基础语法
  • (12)Hive调优——count distinct去重优化
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (一)80c52学习之旅-起始篇
  • (转)linux下的时间函数使用
  • (转载)Linux 多线程条件变量同步
  • ***检测工具之RKHunter AIDE
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net web项目 调用webService
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net语言中的StringBuilder:入门到精通
  • .skip() 和 .only() 的使用
  • @javax.ws.rs Webservice注解