C# 合并和拆分PDF文件
一、合并和拆分PDF文件的方式
PDF文件使用了工业标准的压缩算法,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页“,可以单独处理各页,特别适合多处理器系统的工作。PDF文件结构主要可以分为四个部分:首部、文件体、交叉引用表、尾部。PDF操作类库非常多,如下图所示,常用的类库有:Spire.Pdf、iTextSh ...
C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项
在 2020 年的最后一天,博客园发起了一个开源项目:基于 .NET 的博客引擎 fluss,我抽空把源码下载下来看了下,发现在属性的定义中,有很多地方都用到了 null!,如下图所示:
这是什么用法呢?之前没有在项目中用过,所以得空就研究了一下。
以前,! 运算符用来表示 “否”,比如不等于 !=。在 C# 8.0 以后,! 运算符有了 ...
C#实现 Server-sent Events
基于http协议交互的推送方法大概方法如下:
轮询(ajax),比较耗费服务器资源。COMET方式(COMET 技术并不是 HTML 5 )
websocket 双向数据推送,灵活,功能强大
Server-sent-event(简称SSE),单项数据推送(Server-sent Events 规范是 HTML 5 规范的一个组成部分)
这里我们研究一下SSE;
一、什么是SSE
Server-sent Ev ...
C# 9 新特性 —— 补充篇
C# 9 新特性 —— 补充篇
Intro
前面我们分别介绍了一些 C# 9 中的新特性,还有一些我觉得需要了解一下的新特性,写一篇作为补充。
Top-Level Statements
在以往的代码里,一个应用程序必须要有 Main 方法才能运行,从 C# 9 开始,支持没有 Main 方法的程序,实际编译之后还是会有一个 Main 方法的,使用示例如下:
using s ...
C# 9 新特性 —— 增强的 foreach
C# 9 新特性 —— 增强的 foreach
Intro
在 C# 9 中增强了 foreach 的使用,使得一切对象都有 foreach 的可能
我们来看一段代码,这里我们试图遍历一个 int 类型的值
思考一下,我们可以怎么做使得上面的代码编译通过呢?
迭代器模式
迭代器模式,提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表 ...
C#脚本引擎CS-Script
最近想要在程序中嵌入一个C#脚本引擎,在.NET Framework时代用过一个叫做CS-Script的东西,感觉还是不错,发现现在也支持.NET Core了,试着嵌入一下。
比较
要说能够运行C#脚本的解决方案,有Roslyn和Mono,与他们相比,CS-Script能够提供的封装更为高级,它底层是通过Roslyn之类的引擎运行的,在此基础上,提供了一些额外 ...
[C#] (原创)进度等待窗口(附:自定义控件的使用)
一、前言
技术没有先进与落后,只有合适与不合适。
在程序当中,经常有耗时较长的操作,为了给用户更好的体验,就需要给用户一个及时的反馈,这种时候就需要用到进度等待窗口。
实现进度等待窗口的技术有很多,比如:BackgroundWorker、Thread等。
不过技术不是难点,难点在于怎么使等待窗口美观实用。所以本文中就基于前几 ...
深入解析 C# 的 String.Create 方法
作者:Casey McQuillan
译者:精致码农
原文:http://dwz.win/YVW
说明:原文比较长,翻译时精简了很多内容,对于不重要的细枝末节只用了一句话概括,但不并影响阅读。
你还记得上一次一个无足轻重的细节点燃你思考火花的时刻吗?作为一个软件工程师,我习惯于专注于一个从未见过的微小细节。那一时刻,我大脑的齿轮会开 ...
C# 9.0新特性详解系列之五:记录(record)和with表达式
1 背景与动机
传统面向对象编程的核心思想是一个对象有着唯一标识,表现为对象引用,封装着随时可变的属性状态,如果你改变了一个属性的状态,这个对象还是原来那个对象,就是对象引用没有因为状态的改变而改变,也就是说该对象可以有很多种状态。C#从最初开始也是一直这样设计和工作的。但是一些时候,你可能非常需要一种 ...
C#使用ML.Net完成人工智能预测
前言
Visual Studio2019 Preview中提供了图形界面的ML.Net,所以,只要我们安装Visual Studio2019 Preview就能简单的使用ML.Net了,因为我的电脑已经安装了Visual Studio2019,所以我不需要重头安装Visual Studio2019 Preview,只要更新即可。
安装
首先找到Visual Studio Installer安装包,如下图。
运行,然后选择如下: ...
C#实现SM4国密加密
本文主要讲解“国密加密算法”SM系列之SM4的C#实现方法,加密规则请详阅国密局发布的文档。
首先需第三方Nuget包:Portable.BouncyCastle (源码来自http://www.bouncycastle.org/csharp/)
1.1 SM4主类
/// <summary>
///
/// </summary>
internal class SM4
{
/// <summary>
/// ...
关于C# Span的一些实践
Span这个东西出来很久了,居然因为5.0又火起来了。
相关知识
在大多数情况下,C#开发时,我们只使用托管内存。而实际上,C#为我们提供了三种类型的内存:
堆栈内存 - 最快速的内存,能够做到极快的分配和释放。堆栈内存使用时,需要用stackalloc进行分配。堆栈的一个特点是空间非常小(通常小于1 MB),适合CPU缓存 ...
C#推流RTMP,摄像头、麦克风、桌面、声卡(附源码)
这段时间一直都在研究推流的技术,经过断断续续将近两个月的摸索实践,终于能稳定地推流了。
这个demo的主要功能就是将采集到的摄像头或桌面的视频、以及麦克风或声卡的音频数据推到Nginx-RTMP服务器上,再由Web浏览器去拉流并播放。
接下来介绍Demo整个功能的实现原理和代码逻辑,大家 ...
C# 中的本地函数
目录引入本地函数的原因本地函数是什么本地函数与 Lambda 表达式的比较命名参数和返回值类型明确赋值变量捕获内存分配范型和迭代器本地函数与异常总结
今天我们来聊一聊 C# 中的本地函数。本地函数是从 C# 7.0 开始引入,并在 C# 8.0 和 C# 9.0 中加以完善的。
引入本地函数的原因
我们来看一下微软 C# 语言首席设计师 Mads ...
C#调用pyd
python打包成pyd在本篇博客不多叙述,请读者自行百度,本篇博客主要讲解在C#中如何调用pyd以及遇到的一些问题如何解决。
1.安装pythonnet
pythonnet是一个强大的工具包,用于C#代码与python代码进行交互,不仅可以实现在C#中调用python,也可以实现在python中调用C#.
GitHub:https://github.com/pythonnet/pythonnet
首先 ...
客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
一:背景
1. 讲故事
周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的:
日期:2020-11-13 12:25:45,923 线程ID:[3924] 日志级别:INFO 错误类:xxx property:[(null)] - 错误描述:应用程序出现了未捕获的异常,Message:该字符串未被识别为有效的 ...
C# Span 源码解读和应用实践
一:背景
1. 讲故事
这两天工作上太忙没有及时持续的文章产出,和大家说声抱歉,前几天群里一个朋友在问什么时候可以产出 Span 的下一篇,哈哈,这就来啦!读过上一篇的朋友应该都知道 Span 统一了 .NET 程序 栈 + 托管 + 非托管 实现了三大块内存的统一访问,🐂👃,而且在 .net 底层 Library 中也是一等公民的存在,很多现 ...
C# 9.0 正式发布了(C# 9.0 on the record)
目录C# 9.0 正式发布一、仅初始化属性(Init-only properties)初始化访问器和只读字段(Init accessors and readonly fields)二、记录(Records)with 表达式(With-expressions)基于值的相等(Value-based equality)继承(Inheritance)位置记录(Positional records)三、顶级程序(Top-level programs)四、改进的模 ...
[C#.NET 拾遗补漏]11:面试必备线程基础知识点
线程的知识太多,知识点有深有浅,往深的研究会涉及操作系统、CPU、内存,往浅了说就是一些语法。没有一定的知识积累,很难把线程的知识写得全面,当然我也没有这个能力。所以想到一个点写一个点,尽量总结一些有用的知识点。线程是个大话题,这个系列可能会有好几遍关于线程的,先从基础的开始,热热身。
一些基础概念
线 ...
说说 C# 9 新特性的实际运用
你一定会好奇:“老周,你去哪开飞机了?这么久没写博客了。”
老周:“我买不起飞机,开了个铁矿,挖了一年半的石头。谁知铁矿垮了,压死了几条蜈蚣,什么也没挖着。”
所以,这么丢死人的事,还是不要提了,爷爷从小教导我做人要低调……
一转眼,.NET 5 要来了,同时也带来了 C# 9。遥想当年,老周刚接触 .NET 1. ...