C#自定义配置文件(一)
C#自定义配置文件
.NET程序中,经常使用Config文件来配置应用程序中经常使用的值,比如数据库连接字符串。最近项目遇到一个需要配置好多节点在配置文件中的需求。为了使配置节点整洁易维护,在代码调用时也保证获取时比较直观,结合自定义配置文件专门整理了一个配置文件帮助类Demo。此篇文章主要讲述自定义配置文件的使用 ...
C#中检查null的语法糖
今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了。然后我又想起来null检查,这个可以说一说。
函数参数null检查
传统写法
写一个函数的时候,最经典的检查,估计也是大家最常使用的null检查,应该是这样的吧:
public static void GetV1(string prompt)
{
if (prompt ...
C# 11 对 ref 和 struct 的改进
前言
C# 11 中即将到来一个可以让重视性能的开发者狂喜的重量级特性,这个特性主要是围绕着一个重要底层性能设施 ref 和 struct 的一系列改进。
但是这部分的改进涉及的内容较多,不一定能在 .NET 7(C# 11)做完,因此部分内容推迟到 C# 12 也是有可能的。当然,还是很有希望能在 C# 11 的时间点就看到完全体的。
本文仅仅 ...
C#语法糖系列 —— 第一篇:聊聊 params 参数底层玩法
首先说说为什么要写这个系列,大概有两点原因。
这种文章阅读量确实高...
对 IL 和 汇编代码 的学习巩固
所以就决定写一下这个系列,如果大家能从中有所收获,那就更好啦!
一:params 应用层玩法
首先上一段 测试代码。
class Program
{
static void Main(string[] args)
{
Test(1 ...
C#取消正在运行的Task
更新记录
本文迁移自Panda666原博客,原发布时间:2021年6月29日。
一、说明
Task默认就依托于底层线程池中的线程,使用.NET为我们定义好的CancellationTokenSource类型就可以实现任务的取消。这是标准规范的任务取消操作。
二、非标准不推荐任务取消操作
除了.NET标准的任务取消操作,我们也可以直接进行对任务底层的线 ...
C#复杂XML反序列化为实体对象两种方式
前言
今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是大同小异。都是我们事先定义好对应的对应的Xml实体模型,不过Xml是通过XmlSerializer类的相关特性来对实体对象和 XML文档之间进行序列化和反序列化操作的。序列化和反序列化其实 ...
C# XML基础入门(XML文件内容增删改查清)
前言:
最近对接了一个第三方的项目,该项目的数据传输格式是XML。由于工作多年只有之前在医疗行业的时候有接触过少量数据格式是XML的接口,之后就几乎没有接触过了。因此对于XML这块自己感觉还是有很多盲点和不足的,所以自己通过一些网上的资料总结了一下XML相关知识点。
什么是XML?
XML是一种可扩展标记语言(EXten ...
[gRPC via C#] gRPC本质的探究与实践
鉴于内容过多,先上太长不看版:
grpc 就是请求流&响应流特殊一点的 Http 请求,性能和 WebAPI 比起来只快在 Protobuf 上;
附上完整试验代码:GrpcWithOutSDK.zip
另附小Demo,基于 Controller 和 HttpClient 的在线聊天室:ChatRoomOnController.zip
本文内容有点长,涉及较多基础知识点,某些结论可能直接得出,没有 ...
C#异步编程由浅入深(三)细说Awaiter
上一篇末尾提到了Awaiter这个类型,上一篇说了,能await的对象,必须包含GetAwaiter()方法,不清楚的朋友可以看上篇文章。那么,Awaiter到底有什么特别之处呢?
首先,从上篇文章我们知道,一个Awaiter必须实现INotifyCompletion接口,这个接口定义如下:
namespace System.Runtime.CompilerServices
{
/// <su ...
浅谈C#字符串构建利器StringBuilder
前言
在日常的开发中StringBuilder大家肯定都有用过,甚至用的很多。毕竟大家都知道一个不成文的规范,当需要高频的大量的构建字符串的时候StringBuilder的性能是要高于直接对字符串进行拼接的,因为直接使用+或+=都会产生一个新的String实例,因为String对象是不可变的对象,这也就意味着每次对字 ...
C#控制树莓派入门
何为树莓派
许久没有写博客了,十二月份西安疫情的影响,居家隔离了一个多月,在其期间,学习了一下树莓派,觉得硬件还是挺有意思的,刚好也看到了巨硬有提供使用c#用来开发树莓派应用的解决方案叫Net Iot,就自己买了一个树莓派入手,尝试用c#去控制树莓派的各个引脚,当然,Net Iot不仅仅支持树莓派 ...
Go vs Java vs C# 语法对比
目录1. 说明2. 对比2.1 关键字(keywords)2.1.1 Go2.1.2 Java2.1.3 C#2.1.4 小结2.2 基本数据类型2.2.1 Go 基本数据类型2.2.2 Java 基本数据类型2.2.3 C# 基本数据类型2.2.4 小结2.3 值类型和引用类型2.3.1 Go 值类型和引用类型2.3.2 Java 值类型和引用类型2.3.3 C# 值类型和引用类型2.3.4 小结2.4 变量2.5 运算2.5.1 Go ...
浅谈C#可变参数params
前言
前几天在群里看到群友写了一个基础框架,其中设计到关于同一个词语可以添加多个近义词的一个场景。当时群友的设计是类似字典的设计,直接添加k-v的操作,本人看到后思考了一下觉得使用c#中的params可以更优雅的实现一个key同时添加一个集合的操作,看起来会更优雅一点,这期间还有群友说道par ...
聊一聊如何用C#轻松完成一个TCC分布式事务
背景
银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决。
在 聊一聊如何用C#轻松完成一个SAGA分布式事务 中介绍了借助 DTM 用 SAGA 事务模式解决了上面的银行跨行转账业务。
这一篇我们就来看看 ...
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
C#的进化
C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
前言
C#也使用了十年有余了。
一路走来,见证了微软从封闭走向开放,从平台捆绑,到成为活跃于Github的重要贡献者。亲历了C#的开创性引领和影响了诸多语言,也看到了其他语言的优秀机制被有机的融合进C#(好吧,我承认语言之间都在互相抄)。在微软的“开发 ...
聊一聊如何用C#轻松完成一个SAGA分布式事务
背景
银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决。
市面上使用比较多的分布式事务框架,支持 SAGA 的,大部分都是 JAVA 为主的,没有提供 C# 的对接方式,或者是对接难度大,一定程度上让 ...
C# 同步 异步 回调 状态机 async await Demo
源码
https://gitee.com/s0611163/AsyncAwaitDemo
为什么会研究这个?
我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者说能不能用async await的方式调用WCF服务呢?
然后我发现WCF是通过BeginXXX和EndXXX这种回调的方式实现异步的,似乎不支持async await语法糖,那只能通过状态机 ...
C#进程调用FFmpeg操作音视频
项目背景
因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂的音视频操作。本篇文章主要讲解的是使用C#进程(Process)调用FFmpeg.exe进行视频合并,音频合并,音频 ...
c#多进程通讯,今天,它来了
引言
在c#中,可能大多数人针对于多线程之间的通讯,是熟能生巧,对于AsyncLocal 和ThreadLocal以及各个静态类中支持线程之间传递的GetData和SetData方法都是信手拈来,那多进程通讯呢,实际上也是用的比较多的地方,但是能够熟能生巧的人和多线程的相比的话呢,那还是有些差距的,所以我昨天整理了一 ...
13 个 C# 10 特性
原文链接:https://blog.okyrylchuk.dev
原文作者:Oleg Kyrylchuk
译: 等天黑
常量的内插字符串
C# 10 允许使用在常量字符串初始化中使用插值, 如下
const string name = "Oleg";
const string greeting = $"Hello, {name}.";
Console.WriteLine(greeting);
// Output: Hello, Oleg.
扩展属性模式
从 C# 10 开始 ...