分类 C# 下的文章

C#中使用Source Generators实现深度Clone

前言

在开发中,我们经常需要创建某个类型实例的副本。

常用的方式,是继承ICloneable接口,然后自行实现Clone(),这会耗费一定的开发时间;或者使用序列化/反序列化方式变相实现,但是性能不高。

现在,可以尝试用Source Generators实现。

阅读剩余部分

using和await using有什么不同?

咨询区

  • Justin Lessard

我注意到在某些情况下,visual studio 经常推荐我这么做。

await using var disposable = new Disposable();
// Do something

来替代下面的这种写法

using var disposable = new Disposable();
// Do something

请问 using 和 await using 到底有什么不同 ?或者说在使用上该怎么抉择?

阅读剩余部分

C#死锁的原理与排查方法详解

死锁的原理

线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,并且互相等待对方释放资源,导致这些线程都处于等待状态,无法继续执行。如果线程都不主动释放所占有的资源,将产生死锁。如果死锁发生在UI线程,则会导致界面停止响应。

阅读剩余部分

c#使用webhook推送消息给钉钉机器人

在项目中将某个操作后的数据Webhook 发送给钉钉机器人。

Webhook 是一个 API 概念,是微服务 API 的使用范式之一,也被成为反向 API,即前端不主动发送请求,完全由后端推送;举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhook 的典型场景。

简单来说,Webhook 就是一个接收 HTTP POST(或GET,PUT,DELETE)的URL,一个实现了 Webhook 的 API 提供商就是在当事件发生的时候会向这个配置好的 URL 发送一条信息,与请求-响应式不同,使用 Webhook 你可以实时接受到变化。

阅读剩余部分

C#使用SkiaSharp.QrCode在Linux下生成二维码

前言

二维码(QR Code),与传统的一维码,比如条形码,二维码具有存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后还可以正常读取);空间利用率高等优点。

因此,二维码在我们的生活中被广泛应用,例如支付码、健康码等。

阅读剩余部分