C#中 ??、 ?、 ?: 、?.、?[ ]
1.可空类型修饰符(?) 引证类型能够运用空引证表明一个不存在的值,而值类型通常不能表明为空。 例如:stringstr=null;是正确的,inti=null;编译器就会报错。 为了使值类型也可为空,就能够运用可空类型,即用可空类型修饰符"?"来表明,表现方式为"T?" 例如:int?表明可空的整形,DateTime?表明可为空 ...
C#黔驴技巧之去重(Distinct)
前言
关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好孰歹自行判之。
分组
首先给出我们需要用到的对象,如下:
public class Person
{
public string Name { get; set ...
C# Autofac学习笔记
一、为什么使用Autofac?
Autofac是.NET领域最为流行的IoC框架之一,传说是速度最快的一个。
1.1、性能
有人专门做了测试:
1.2、优点
1)与C#语言联系很紧密。C#里的很多编程方式都可以为Autofac使用,例如可以使用Lambda表达式注册 ...
如何在C#/.NET Core中使用责任链模式
原文:Chain Of Responsbility Pattern In C#/.NET Core
作者:Wade
译者:Lamond Lu
最近我有一个朋友在研究经典的“Gang Of Four”设计模式。他经常来询问我在实际业务应用中使用了哪些设计模式。单例模式、工厂模式、中介者模式 - 都是我之前使用过,甚至写过相关文章的模式。但是有一种模式是我还没有写过文章,即责 ...
C#实现SM2国密加密
本文主要讲解“国密加密算法”SM系列的C#实现方法,不涉及具体的算法剖析,在网络上找到的java实现方法比较少,切在跨语言加密解密上会存在一些问题,所以整理此文志之。JAVA实现参考http://blog.csdn.net/ererfei/article/details/50998162
1.SM2 & SM3由于SM2算法中需要使用SM3摘要算法,所以把他们放在一 ...
C#多线程(16):手把手教你撸一个工作流
目录前言节点ThenParallelScheduleDelay试用一下顺序节点并行任务编写工作流接口构建器工作流构建器依赖注入实现工作流解析
前言
前面学习了很多多线程和任务的基础知识,这里要来实践一下啦。通过本篇教程,你可以写出一个简单的工作流引擎。
本篇教程内容完成是基于任务的,只需要看过笔者的三篇关于异步的文章,掌握 C# ...
C# 9 新特性:代码生成器、编译时反射
前言
今天 .NET 官方博客宣布 C# 9 Source Generators 第一个预览版发布,这是一个用户已经喊了快 5 年特性,今天终于发布了。
简介
Source Generators 顾名思义代码生成器,它允许开发者在代码编译过程中获取查看用户代码并且生成新的 C# 代码参与编译过程,并且可以很好的与代码分析器集成提供 Intellisense、调试信息和 ...
C#多线程(15):任务基础③
目录TaskAwaiter延续的另一种方法另一种创建任务的方法实现一个支持同步和异步任务的类型Task.FromCanceled()如何在内部取消任务Yield 关键字补充知识点
任务基础一共三篇,本篇是第三篇,之后开始学习异步编程、并发、异步I/O的知识。
本篇会继续讲述 Task 的一些 API 和常用的操作。
TaskAwaiter
先说一下 TaskAwaiter,T ...
C# ORM学习笔记:Dapper基本用法
一、基础知识
1.1、Dapper简介
Dapper是.NET下的一个micro ORM,它和Entity Framework或NHibnate不同,属于轻量级并且是半自动的(实体类都要自己写)。假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ORM。
1.2、Dapper优点
...
C#多线程(13):任务基础①
目录多线程编程多线程编程模式探究优点任务操作两种创建任务的方式Task.Run() 创建任务取消任务父子任务任务返回结果以及异步获取返回结果捕获任务异常全局捕获任务异常
多线程编程
多线程编程模式
.NET 中,有三种异步编程模式,分别是基于任务的异步模式(TAP)、基于事件的异步模式(EAP)、异步编程模式(APM)。
基于任务的 ...
C#多线程(12):线程池
目录线程池ThreadPool 常用属性和方法线程池说明和示例线程池线程数线程池线程数说明不支持的线程池异步委托任务取消功能计时器
线程池
线程池全称为托管线程池,线程池受 .NET 通用语言运行时(CLR)管理,线程的生命周期由 CLR 处理,因此我们可以专注于实现任务,而不需要理会线程管理。
线程池的应用场景:任务并行库 (TP ...
C#多线程(11):线程等待
目录前言volatile 关键字三种常用等待再说自旋和阻塞SpinWait 结构属性和方法自旋示例新的实现SpinLock 结构属性和方法示例等待性能对比
前面我们学习了很多用于线程管理的 类型,也学习了多种线程同步的使用方法,这一篇主要讲述线程等待相关的内容。
在笔者认真探究多线程前,只会new Thread;锁?Lock;线程等待?Thread ...
[一起读源码]走进C#并发队列ConcurrentQueue的内部世界 — .NET Core篇
在上一篇《走进C#并发队列ConcurrentQueue的内部世界》中解析了Framework下的ConcurrentQueue实现原理,经过抛砖引玉,得到了一众大佬的指点,找到了.NET Core版本下的ConcurrentQueue源码,位于以下地址:
https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Collections/C ...
C#多线程(4):进程同步Mutex类
目录Mutex 类构造函数和方法系统只能运行一个程序的实例解释一下上面的示例接替运行进程同步示例另外
Mutex 类
Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。
Mutex 跟 lock 相似,但是 Mutex 支持多个进程。Mutex 大约比 lock 慢 20 倍。
互斥锁(Mutex),用于多线程中防止两条线程 ...
C#多线程系列(3):原子操作
本章主要讲述多线程竞争下的原子操作。
目录知识点竞争条件线程同步CPU时间片和上下文切换阻塞内核模式和用户模式Interlocked 类1,出现问题2,Interlocked.Increment()3,Interlocked.Exchange()4,Interlocked.CompareExchange()5,Interlocked.Add()6,Interlocked.Read()
知识点
竞争条件
当两个或两个以上的线程访问共 ...
C#多线程系列(1):Thread
目录1,获取当前线程信息2,管理线程状态2.1 启动与参数传递2.1.1 ParameterizedThreadStart2.1.2 使用静态变量或类成员变量2.1.3 委托与Lambda2.2 暂停与阻塞2.3 线程状态2.4 终止2.5 线程的不确定性2.6 线程优先级、前台线程和后台线程2.7 自旋和休眠
本篇是《多线程入门和实践(初级)》的第一篇,也是大家相当熟悉和不屑 ...
C#两大知名Redis客户端连接哨兵集群的姿势
前言
前面利用《Docker-Compose搭建Redis高可用哨兵集群》,
我们的思路是将Redis、Sentinel、Redis Client App链接到同一个网桥网络,这个网桥内的Redis Client App就可以使用ContainerIP访问网桥内任意redis节点。
同一网桥网络访问规避了Docker上发生的NAT,端口映射的复杂性, 但实际上并不是最常规的做法(今天咱们也 ...
[一起读源码]走进C#并发队列ConcurrentQueue的内部世界
决定从这篇文章开始,开一个读源码系列,不限制平台语言或工具,任何自己感兴趣的都会写。前几天碰到一个小问题又读了一遍ConcurrentQueue的源码,那就拿C#中比较常用的并发队列ConcurrentQueue作为开篇来聊一聊它的实现原理。
话不多说,直奔主题。
要提前说明下的是,本文解析的源码是基于.NET Framework 4.8版本,地址 ...
"Xaml+C#"桌面客户端跨平台初体验
"Xaml+C#"桌面客户端跨平台初体验
前言
随着 .Net 5的到来,微软在 .Net 跨平台路上又开始了一个更高的起点。回顾.Net Core近几年的成果,可谓是让.Net重生了一次.
Asp .Net Core跨平台解决了Windows服务器昂贵的费用和不能长时间待机的问题,让Asp程序能够跑在Linux甚至Mac上。从博客园里.Net分类可以看到,每天都 ...
C#中的9个“黑魔法”
C#中的9个“黑魔法”与“骚操作”
我们知道C#是非常先进的语言,因为是它很有远见的“语法糖”。这些“语法糖”有时过于好用,导致有人觉得它是C#编译器写死的东西,没有道理可讲的——有点像“黑魔法”。
那么我们可以看看C#这些高级语言功能,是编译器写死的东西(“黑魔法”),还是可以扩展(骚操作)的“鸭子类型”。
...