自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

walterlv - 吕毅

欢迎访问 https://blog.walterlv.com/ 热爱设计,不止是程序,更是艺术!

原创 一文看懂 .NET 的异常处理机制、原则以及最佳实践

什么时候该抛出异常,抛出什么异常?什么时候该捕获异常,捕获之后怎么处理异常?你可能已经使用异常一段时间了,但对 .NET/C# 的异常机制依然有一些疑惑。那么,可以阅读本文。 本文适用于已经入门 .NET/C# 开发,已经开始在实践中抛出和捕获异常,但是对 .NET 异常机制的用法以及原则比较模糊...

2019-07-04 13:30:00

阅读数 142

评论数 0

原创 WPF 很少人知道的科技

本文介绍不那么常见的 WPF 相关的知识。 本文内容在 C# 代码中创建 DataTemplate多个数据源合并为一个列表显示使用附加属性做缓存,避免内存泄漏使用 ConditionalWeakTable 做非 WPF 版本的缓存使用代码模拟触摸模拟 UWP 界面模拟 Fluent Design...

2019-07-27 20:46:57

阅读数 122

评论数 0

原创 git 配置错误导致无法推送远端仓库?本文介绍各种修复方式

无论你使用原生的 git 命令行,还是使用其他的 GUI 客户端来管理你的 git 仓库,都会遇到 git 远程仓库的身份认证机制。如果在某个远程仓库第一次认证的时候输入了错误的信息,那么 git 以及一部分 git GUI 客户端会记住这个错误的身份认证信息,使得以后也不能继续与远程仓库进行交互...

2019-07-27 20:46:07

阅读数 27

评论数 0

原创 MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译

我们这里说的编译任务是 MSBuild 的 Target。虽然只有少部分,但确实有一些情况需要判断是否在 Visual Studio 中编译的时候才需要执行的编译任务,典型的如某些仅为设计器准备的代码。 本文需要理解的前置知识是: 解读 Microsoft.NET.Sdk 的源码,你能定制各种...

2019-07-27 20:43:21

阅读数 29

评论数 0

原创 使用 ProcessMonitor 找到进程所操作的文件的路径

很多系统问题都是可以修的,不需要重装系统,但是最近我还是重装了。发现之前正在玩的一款游戏的存档没有了……因为我原有系统的数据并没有删除,所以我还是能找回原来的游戏存档的。但是,我怎么知道这款游戏将存档放在了那个路径下呢?搜索当然是好方法,不过我喜欢玩的游戏大多是冷门游戏,有些搜不到。于是我就用 P...

2019-07-27 20:42:38

阅读数 152

评论数 0

原创 C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性

我只是增加库的一个 API,比如增加几个类而已,应该不会造成兼容性问题吧。对于编译好的二进制文件来说,不会造成兼容性问题;但——可能造成源码不兼容。 本文介绍可能的源码不兼容问题。 本文使用多种语言编写,你可以选择你喜欢的语言阅读: C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可...

2019-07-27 20:40:47

阅读数 22

评论数 0

原创 如何为 Win32 的打开和保存对话框编写文件过滤器(Filter)

在使用 Win32 / WPF / Windows Forms 的打开或保存文件对话框的时候,多数情况下我们都会考虑编写文件过滤器。UWP 中有 FileTypeFilter 集合可以添加不同的文件种类,但 Win32 中却是一个按一定规则组合而成的字符串。 因为其包含一定的格式,所以可能写错。本...

2019-07-27 20:38:13

阅读数 51

评论数 0

原创 .NET/C# 的字符串暂存池

本文介绍 .NET 中的字符串暂存池。 本文内容字符串暂存池编译期间确定从暂存池中获取字符串不要池化垃圾回收 字符串暂存池 .NET 的 CLR 运行时会在运行期间管理一个字符串暂存池(string intern pool),在字符串暂存池中的字符串只有一个实例。 例如,在下面的代码中,变量 a...

2019-07-27 20:36:42

阅读数 37

评论数 0

原创 .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉

当我们不再使用某个对象的时候,此对象会被 GC 垃圾回收掉。当然前提是你没有写出内存泄漏的代码。我们也知道如果生成了大量的字符串,会对 GC 造成很大的压力。 但是,如果在编译期间能够确定的字符串,就不会被 GC 垃圾回收掉了。 本文内容示例代码 示例代码 下面,我创建了几个字符串,我关心的字符...

2019-07-27 20:35:54

阅读数 50

评论数 0

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

延迟计算属性的值,应该很多小伙伴都经常使用。比如在属性的 get 方法中判断是否已初始化,如果没有初始化则立即开始初始化。 但这样的写法存在一个很大的问题——如果你使用 Visual Studio 调试,当你把鼠标划到对象的实例上的时候,属性就会立刻开始进行初始化。而此时对你的代码来说可能就过早初...

2019-07-27 20:34:37

阅读数 17

评论数 0

原创 在整个 Git 仓库的历史(包括所有分支和标签)中修改提交作者的信息(姓名和邮箱)

一般情况下不建议修改 git 仓库的历史。 但是现在我计划开源我的一个项目,于是自己个人使用的姓名和邮箱就需要在开源的时候改为使用我公开的姓名和邮箱。对于旧仓库,我将废弃,将来所有的精力都将在开源版本的仓库中;而对于开源版本的新仓库,由于此前没有人克隆过,所以也不会因为历史的修改产生问题。所以,我...

2019-07-27 20:33:33

阅读数 67

评论数 0

原创 在 Visual Studio 中重新将高级保存功能放出来,便于强制指定文件编码格式

Visual Studio 的早期版本中有一个高级保存功能,但是升级到 Visual Studio 2019 之后这个功能就不在菜单项里面了。 本文将带你把它找出来继续使用。 本文内容第一步:工具 -> 自定义第二步:自定义命令 第一步:工具 -> 自定义 打开 Vi...

2019-07-27 20:31:42

阅读数 79

评论数 0

原创 .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)

如果你使用过 WPF/UWP 等 XAML UI 框架,那么应该了解到附加属性的概念。那么没有依赖属性支持的时候如何做附加属性的功能呢?你可能会想到弱引用。但这需要做一个弱引用字典,要写的代码还是非常麻烦的。 本文介绍 .NET 的 ConditionalWeakTable<TKey...

2019-07-27 20:29:25

阅读数 81

评论数 0

原创 WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性)

本文介绍如何使用 Windows 的 AppBar 相关 API 实现固定停靠在桌面上的特殊窗口。 本文内容停靠窗口AppBar如何使用如何还原附源码 停靠窗口 你可能并不明白停靠窗口是什么意思。 看下图,你可能使用过 OneNote 的停靠窗口功能。当打开一个新的 OneNote 停靠窗口之后...

2019-07-27 20:27:03

阅读数 93

评论数 0

原创 WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口

当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口。但是,如果直接判断是否是 Window 类型,那么在设计器中这个属性的设置就会直接出现异常。 那么有没有什么方法能够得知这是一个设计时的窗口呢?这样就不会抛出异常,而能够完美支持设计器了。 本文...

2019-07-27 20:12:06

阅读数 70

评论数 0

原创 通过修改环境变量修改当前进程使用的系统 Temp 文件夹的路径

Windows 系统提供了一个在 Windows 单个用户下全局的 Temp 文件夹,用于给各种不同的应用程序提供一个临时目录。但是,直到 Windows 10 推出存储感知功能之前,这个文件夹都一直只归各个应用程序自己管理,应用自己需要删除里面的文件。另外,进程多了,临时文件也会互相影响(例如个...

2019-07-27 20:11:26

阅读数 211

评论数 0

原创 在编译期间使用 Roslyn/MSBuild 自带的方法/函数判断、计算和修改属性

充分利用 MSBuild 自带的方法,可以在编译期间完成大多数常见的属性转换,而不再需要自己专门写库来完成。 本文介绍如何使用 MSBuild 自带的方法,并列举 MSBuild 中各种自带的方法。 本文内容如何在编译期间使用 MSBuild 自带的方法MSBuild 自带的方法数学运算Ensu...

2019-07-27 20:10:26

阅读数 66

评论数 0

原创 Roslyn/MSBuild 在编译期间从当前文件开始查找父级文件夹,直到找到包含特定文件的文件夹

大家在进行各种开发的时候,往往都不是写一个单纯项目就完了的,通常都会有一个解决方案,里面包含了多个项目甚至是大量的项目。我们经常会考虑输出一些文件或者处理一些文件,例如主项目的输出目录一般会选在仓库的根目录,文档文件夹一般会选在仓库的根目录。 然而,我们希望输出到这些目录或者读取这些目录的项目往往...

2019-07-27 20:09:12

阅读数 61

评论数 0

原创 Markdown 如何在内联代码或者代码块中使用代码开始符号反引号(`)

我们都知道如何在 Markdown 中使用反引号 ` 来包裹一段代码。无论是内联的代码还是单独的代码块,都需要使用它,只是个数的差别,比如 ` 和 ```````````。 那么如何能够在代码片中输入反引号(backtick)呢? 方法是:用两个反引号来包裹。 本文内容内联代码中包含反引号内联代...

2019-07-27 20:08:07

阅读数 102

评论数 0

原创 C# 8.0 中开启默认接口实现

当你升级到 C# 8.0 和 .NET Core 3.0 之后,你就可以开始使用默认接口实现的功能了。 从现在开始,你可以在接口里面添加一些默认实现的成员,避免在接口中添加成员导致大量对此接口的实现崩溃。 本文内容最低要求下载安装 Visual Studio 2019 Preview 版本开启 ...

2019-07-27 20:07:10

阅读数 33

评论数 0

提示
确定要删除当前文章?
取消 删除