- 博客(123)
- 资源 (14)
- 收藏
- 关注
原创 【C#】BlockingCollection 用法浅析
多线程操作集合时,ConcurrentQueue 是我常用的,一直用得也挺爽,突然发现了 BlockingCollection,原来还可以更简单。。。BlockingCollection<T> 是一个自带阻塞功能的线程安全集合类,和 ConcurrentQueue<T> 有点像,不同的是,BlockingCollection<T> 自带阻塞功能。Add ...
2021-03-30 11:20:00 150
原创 【C#】使用 Castle 实现 AOP,以及 Autofac 集成 Castle
Castle 是 2003 年诞生于 Apache Avalon 项目,目的是为了创建一个IOC 框架。发展到现在已经有四个组件:ORM组件:ActiveRecordIOC组件:Windsor动态代理组件:DynamicProxyWeb MVC组件:MonoRail本文主要介绍 动态代理组件 Castle.DynamicProxy基本用法Castle.DynamicProxy ...
2021-02-22 08:52:00 109
原创 【C#】反射的用法及效率对比
反射实例化类public class Person{ public string Name { get; set; } public Person(string name) { this.Name = name; } public string Say(string msg) { return $"{Name...
2021-02-18 13:13:00 92
原创 【C#】List 并发丢数据问题
项目中出了个 BUG,就在我眼皮子底下,很明显的一个 BUG,愣是看了两天才看出来。我有多个任务并发,任务执行完成后都有一个返回结果,我用一个 List 将结果收集起来,等所有任务完成后,发送出去。结果一直 丢数据。我反复检查逻辑都没有问题,最后恍然 List 是非线程安全的。大家都知道 List 是非线程安全的,但是如果仅有 Add 操作呢?估计有些人就会认为没问题。下面的代码,期望输...
2021-02-09 10:34:00 43
原创 【C#】DockPanelSuite 中 DockState.Document 状态下子窗体控件不显示的解决方案
DockPanelSuite 是 Winform 中优秀的布局控件,但是这次使用过程中却出了个问题。我遇到的问题是这样的,主窗体是通过 ShowDialog 显示的,子窗体的停靠状态为 DockState.Document,主窗体关闭时,并未真正 Close,仅是 Hide。然后问题来了问题1:在主窗体 Load 事件中直接 Show 子窗体,关闭主窗体后再次打开,报错 创建窗口句柄时出错...
2020-12-16 18:41:00 65
原创 【C#】DataGridView 数据绑定的一些细节
多年不写 Winform 了,突然要做一个 winform 项目,各种不顺手,各种百度。DataGridView 数据绑定的一些细节问题,记录备查。数据绑定BindingList<EmployeeVO> dataSource;private async void FrmEmployeeInfo_Load(object sender, System.EventArgs e)...
2020-08-16 18:30:00 29
原创 【设计模式】如何用组合替代继承
如果问面向对象的三大特性是什么,多数人都能回答出来:封装、继承、多态。继承 作为三大特性之一,近来却越来越不推荐使用,更有极端的语言,直接语法中就不支持继承,例如 Go。这又是为什么呢?为什么不推荐使用继承?假设我们要设计一个关于鸟的类。我们将“鸟类”定义为一个抽象类 AbstractBird。所有更细分的鸟,比如麻雀、鸽子、乌鸦等,都继承这个抽象类。大部分鸟都会飞,那我们可不可以在 ...
2020-06-15 09:47:00 30
原创 如何用组合替代继承
如果问面向对象的三大特性是什么,多数人都能回答出来:封装、继承、多态。继承 作为三大特性之一,近来却越来越不推荐使用,更有极端的语言,直接语法中就不支持继承,例如 Go。这又是为什么呢?为什么不推荐使用继承?假设我们要设计一个关于鸟的类。我们将“鸟类”定义为一个抽象类 AbstractBird。所有更细分的鸟,比如麻雀、鸽子、乌鸦等,都继承这个抽象类。大部分鸟都会飞,那我们可不可以在 AbstractBird 抽象类中,定义一个 Fly() 方法呢?答案是否定的。尽管大部分鸟都会飞,但也有特例,
2020-06-15 09:42:45 999
原创 【C#】AutoMapper 使用手册
文章目录1 入门例子2 注册2.1 Profile3 配置3.1 命名约定3.2 配置可见性3.3 全局属性/字段过滤3.4 识别前缀和后缀3.5 替换字符4 调用构造函数5 数组和列表映射5.1 处理空集合5.2 集合中的多态6 方法到属性映射7 自定义映射8 扁平化映射8.1 IncludeMembers9 嵌套映射本文基于 AutoMapper 9.0.0AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象。官网地址:http://automapper.org/官方
2020-06-12 10:36:34 1131
原创 函数式编程中的基本概念
函数签名假设有一个函数 f,输入一个 int 值,返回一个 string 值,在 C# 中,该函数可以表示为:Func<int, string>我们可以使用箭头(→)符号来表示:f : int → string箭头符号是函数式编程社区的标准函数符号,与语言无关。当没有输入或没有输出(void)时,用 () 表示。如果有多个输入或输出,则用元组表示。例如:Func<string>Func<int, int, int>分别表示为:() → str
2020-06-02 11:40:15 387
原创 【VS】Visual Studio 就可以反编译查看源码了,再见了 Reflector
以前需要反编译的时候,一直都是用的神器 Reflector。但毕竟还是有点不方便,因为要从 VS 切换到另一个工具。而且,Reflector 现在收费了。然而现在才发现,原来 VS 已经自带反编译功能了,不愧是宇宙第一 IDE。工具 → 选项 → 文本编辑器 → c#>高级 → 启用导航到反编译源勾上以后, F12 就可以直接查看反编译后的源代码了。...
2020-05-23 12:58:26 25030 2
原创 【C#】使用 System.Globalization.DateTimeFormatInfo 屏蔽系统时间格式对代码的影响
时间格式我使用的一直都是 yyyy-MM-dd HH:mm:ss,然后某天,我改成了 yyyy/MM/dd HH:mm:ss,然后神奇的问题就来了。怎么会出现这种情况的呢?因为我手贱改了系统的日期格式。打开 控制面板 → 日期和时间 → 更改日期和时间 → 更改日历设置我把日期格式设置成了 yyyy-MM-dd,然后就这样了。也就是说,系统的时间格式优先级比 ToString 方法要高。我们一般不会去修改系统的时间格式,这时 ToString 方法还是有效的,一旦修改了,ToString 方法就
2020-05-19 13:15:29 865
原创 【swagger】C# 中 swagger 的使用及避坑
文章目录1 安装2 修改名称和版本号3 显示说明4 路由相同,查询参数不同的方法5 忽略 Model 中的某些字段6 传递 header7 出错时的 HTTP 状态码开发 web api 的时候,写文档是个痛苦的事情,而没有文档别人就不知道怎么调用,所以又不得不写。swagger 可以自动生成接口文档,并测试接口,极大的解放了程序员的生产力。1 安装通过 NuGet 安装 Swashbuc...
2020-04-07 12:49:13 4501 2
原创 【C#】Newtonsoft.Json 中 JArray 添加数组报错:Could not determine JSON object type for type 'xxx'
有时我们临时需要一个 JSON 字符串,直接拼接肯定不是好方法,但又懒得去定义一个类,这是用 JObject 就会非常的方便。但是在 JObject 中添加数组却经常被坑。List<string> names = new List<string>{ "Tom", "Jerry"};JArray array = new JArray(names);...
2020-04-03 13:02:49 3262
原创 【C#】比较 Random 与 RandomNumberGenerator 生成随机字符串
生成随机数,第一反应肯定是 Random 类,然而,Random 生成的随机数被称为伪随机数,因为用 Random 生成随机数时,需要用到一个“种子”,而 使用相同的种子,一定会产生相同序列的数字。Random r1 = new Random(1);Console.WriteLine(r1.Next(100)); // 24Random r2 = new Random(1);Consol...
2020-04-02 11:02:48 960
原创 【C#】正则进阶
.NET 中的正则表达式是基于 Perl 5 的正则表达式。超时从 .NET Framework 4.5 开始,正则表达式支持在匹配操作中指定超时时间。如果匹配超时,就会抛出 RegexMatchTimeoutException。所有方法都增加了带超时时间参数的重载:public static Match Match(string input, string pattern, RegexO...
2020-02-12 12:19:18 203
原创 【C#】写文件时如何去掉编码前缀
我们都知道,文件有不同的编码,例如我们常用的中文编码有:UTF8、GK2312 等。Windows 操作系统中,新建的文件会在起始部分加入几个字符的前缀,来识别编码。例如,新建文本文件,写入单词 Hello,另存为 UTF8。Hello 占 5 个字节,但文本大小却是 8 个字节。(win7 系统下还是这样的,win10 已经去掉了编码前缀,所以 win10 下文件大小依然是 5 个字节。看来...
2020-02-10 10:38:16 317
原创 【C#】定时器保活机制引起的内存泄露问题
C# 中有三种定时器,System.Windows.Forms 中的定时器和 System.Timers.Timer 的工作方式是完全一样的,所以,这里我们仅讨论 System.Timers.Timer 和 System.Threading.Timer1、定时器保活先来看一个例子:class Program{ static void Main(string[] args) ...
2020-02-06 10:42:46 644
原创 【VS】NuGet 修改包路径
NuGet 是 .NET 平台下的一个免费、开源的包管理开发工具。修改全局包管理目录通过 NuGet 安装包时,NuGet 先将包下载至一个统一的目录,默认路径是:C:\Users\用户名\.nuget\packages下载的包多了以后,会导致 C 盘空间被大量占用。我们可以通过修改配置将其指定到自定义的目录下。搜索 NuGet.Config 文件,默认位置是:C:\Users\用户名\...
2019-11-20 10:33:00 35
原创 NuGet 修改包路径
NuGet 是 .NET 平台下的一个免费、开源的包管理开发工具。修改全局包管理目录通过 NuGet 安装包时,NuGet 先将包下载至一个统一的目录,默认路径是:C:\Users\用户名\.nuget\packages下载的包多了以后,会导致 C 盘空间被大量占用。我们可以通过修改配置将其指定到自定义的目录下。搜索 NuGet.Config 文件,默认位置是:C:\Users\用户名\A...
2019-11-20 10:32:08 1304
原创 【MySQL】在 Windows 下安装教程、避坑指南
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,2008 年被 SUN 公司收购,后 SUN 公司又被 Oracle 公司收购。一、下载MySQL 官网 https://www.mysql.com/点击 DOWNLOADS 进入下载地址,会看到几个不同的版本:MySQL Enterprise Edition:企业版(收费)MySQL Cluster CGE...
2019-11-19 10:52:00 13
原创 MySQL 在 Windows 下安装教程、避坑指南
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,2008 年被 SUN 公司收购,后 SUN 公司又被 Oracle 公司收购。一、下载MySQL 官网 https://www.mysql.com/点击 DOWNLOADS 进入下载地址,会看到几个不同的版本:MySQL Enterprise Edition:企业版(收费)MySQL Cluster CGE:...
2019-11-19 10:42:08 214
原创 【C#】Newtonsoft.Json 常用方法总结
文章目录1、Entity to Json1.1、准备工作1.2、Entity to Json返回不缩进的 Json 字符串返回缩进的 Json 字符串Json 字符串缩进其他设置1.3、Json to Entity2、Linq To Json2.1、创建对象2.2、从 Json 字符串创建 JObject2.3、从 Entity 创建 JObject用匿名对象创建 JObject2.2、获取值获取...
2019-10-12 09:46:46 1678 1
原创 【Web API】通俗讲解 RESTful
1 什么是 RESTful百度一下 RESTful,查到的资料很多都讲得不清楚,看完了都不知道说的是啥,导致很多人对 RESTful 不甚了解。来看一下常见的解释:(1)神一样的描述REST 并不是“休息”的意思,而是 Representational State Transfer 的简称,即 表现层状态转移。“表现层状态转移”是什么鬼?(2)云里雾里的描述REST 指的是 一组架...
2019-09-26 10:33:00 13
原创 通俗讲解 RESTful
RESTful 是最流行的 API 设计规范,但是什么是 RESTful?表现层状态转移,这恐怕谁都看不懂。本文用最通俗的说法,讲明白什么是 RESTful。
2019-09-26 10:26:35 935 2
原创 Protobuf 安装及 Python、C# 示例
01| 简介02| 安装2.1 Windows 下安装03| 简单使用3.1 编译3.2 Python 示例3.3 C# 示例01| 简介Protobuf(Protocol Buffers),是 Google 开发的一种跨语言、跨平台的可扩展机制,用于序列化结构化数据。与 XML 和 JSON 格式相比,protobuf 更小、更快、更便捷。protobuf 目前支持 C++、Java、...
2019-09-10 10:22:00 14
原创 【VS Code】配置 Python 开发环境
1、终端运行 Python2、安装 Python 插件3、查看、安装外部库4、代码补全工具5、代码检查工具5.1、pylint5.2、flake8 和 yapf本文基于 VS Code 1.36.1VS Code 里是不包括 Python 的,所以你首先得安装一个 Python。1、终端运行 Python安装完 python 之后,我们可以用任何一个文本编辑工具开始写 python...
2019-09-06 10:03:00 9
原创 【Python】logging.NullHandler 的使用
在使用 peewee 框架时,默认是不会出现日志消息的。from peewee import Model, CharField, DateTimeField, IntegerFieldfrom peewee_mssql import MssqlDatabasedb = MssqlDatabase(database='test', host='.', user='sa', password=...
2019-09-04 11:08:37 813 1
原创 【Python】logging 的巧妙设计
引言logging 的基本用法网上很多,这里就不介绍了。在引入正文之前,先来看一个需求:假设需要将某功能封装成类库供他人使用,如何处理类库中的日志?数年前在一个 C# 开发的项目中,我用了这样的方法:定义一个 logging 基类,所有需要用到日志的类都继承这个基类,这个基类中定义一个 LogHandler 事件,该事件用于实现具体的记录日志动作,同时可以通过将类 A 的 LogHand...
2019-08-26 16:18:22 160
原创 【Python】正则表达式用法
1、正则基础1.1、基础语法1.2、修饰符1.3、贪婪与懒惰2、正则进阶2.1、捕获分组2.2、零宽断言2.3、条件匹配2.4、findall结语导读:正则在各语言中的使用是有差异的,本文以 Python 3 为基础。本文主要讲述的是正则的语法,对于 re 模块不做过多描述,只会对一些特殊地方做提示。很多人觉得正则很难,在我看来,这些人一定是没有用心。其实正则很简单,根据二八原则,我们...
2019-08-16 12:03:00 7
原创 【PyCharm】配置 Git 教程
之前给大家介绍了 Git 安装及使用指南,今天再给大家介绍一下在 PyCharm 中使用 Git。1打开 File -> Settings -> Version Control -> Git,在 Path to Git executable 处选择 git 的安装位置。配置完成之后,点击【Test】按钮,如果成功,则会显示 Git 版本信息,如下图:2点击 VC...
2019-07-30 13:07:00 9
原创 VS Code 安装 LeetCode 插件
直接在 LeetCode 上写代码,那是很痛苦的一件事,那就相当于用 txt 写代码一样,没有 IDE 的各种功能。VS Code 的 LeetCode 插件帮助我们解决了这一问题。
2019-07-29 10:10:58 7481 6
原创 【VS Code】安装 LeetCode 插件
练习算法绕不开的一个网站就是力扣,很多小伙伴为了拿到大厂 offer,刷题都刷到吐了。然而如果直接在 LeetCode 上写代码,那是很痛苦的一件事,那就相当于用 txt 写代码一样,没有 IDE 的各种功能。VS Code 的 LeetCode 插件帮助我们解决了这一问题。以下是官方教程:https://github.com/jdneo/vscode-leetcode/blob/mast...
2019-07-29 10:08:00 26
原创 Git 安装及使用指南
文章目录1 简介1.1 Git1.2 Github2 Git 在 Windows 下的安装和使用2.1 msysgit2.2 Tortoisegit2.2.1 安装2.2.2 配置2.2.3 简单使用1 简介1.1 GitGit是目前世界上最先进的分布式版本控制系统(没有之一)。1.1 Git 与 SVN 的区别:SVN 是集中式版本控制系统,版本库是集中放在中央服务器的。协同工作的人们...
2019-07-23 11:32:37 756
Python 贪吃蛇
2018-09-05
Python游戏编程入门 源代码
2018-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人