A_nanda
夜临门 路难行 手提孤灯 晓烛之明 且行且珍惜
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
拆解ASP.NET Core 底层源码!从零手写
你有没有过这种感受:用了好几年ASP.NET Core,CRUD 写得飞起,但一碰到底层问题就懵?中间件执行顺序到底是怎么控制的?依赖注入容器内部是怎么创建对象的?路由匹配为什么有时候不按预期工作?为什么同样的代码,换个环境性能差十倍?很多开发者停留在 "会用" 层面,遇到复杂场景就束手无策。真正的差距,不在于你用了多少中间件,而在于你是否理解框架底层的设计思想。原创 2026-08-27 11:03:55 · 545 阅读 · 0 评论 -
推荐一款.net 配置类库RuoVea.ExConfig
Configset;set;set;set;set;set;set;set;set;set;原创 2026-09-04 10:02:46 · 85 阅读 · 0 评论 -
推荐一款.net工具RuoVea.ExUtil
/ 当前 UTC+8 区 Unix 时间戳(秒)// Unix 时间戳 → DateTime// DateTime → Unix 时间戳(秒)⚠️已知缺陷硬编码,仅适用于 UTC+8(中国时区)场景,非东八区环境需自行处理。文件: Validate/Attributes/EmailAttribute.cs构造参数: msg(自定义错误消息)实际: 构造函数接收 msg 参数后未使用,始终返回硬编码的英文错误消息。原创 2026-09-03 08:58:43 · 355 阅读 · 0 评论 -
c#WPF开发常见问题
现象:自定义控件时,属性绑定不生效,或者 XAML 报错。原因:依赖属性的包装器(Wrapper)里写了逻辑,或者注册时参数写错。解决方案不要在 CLR Wrapper(get/set)中写逻辑:WPF 在 XAML 解析时有时会绕过 Wrapper 直接调用。使用 标准模板。// ❌ 错误写法:在 Wrapper 中写逻辑set// 警告:XAML 可能不会调用这个 Setter!// 这行代码可能永远不会执行// ✅ 正确写法:使用 PropertyChangedCallback。原创 2026-08-13 15:48:36 · 206 阅读 · 0 评论 -
C# 委托(Delegate)完全指南:从基础到实战
委托是一种类型安全的函数指针,它定义了方法的签名(返回值类型 + 参数列表),可以持有符合该签名的一个或多个方法的引用,并在需要时调用它们。// 定义委托// 符合签名的方法// 使用类型安全:编译器检查方法签名是否匹配可以指向静态方法、实例方法、匿名方法、Lambda 表达式支持多播(Multicast),即一个委托变量可以绑定多个方法本质是的子类,继承自委托是 C# 中将方法作为参数传递的核心机制,它让代码从"硬编码调用"进化为"行为注入"。掌握委托,你就掌握了:事件驱动编程。原创 2026-08-22 09:59:10 · 116 阅读 · 0 评论 -
C# 比较两个对象是否是同一对象
比较对象是编程中的一项基本技能,它帮助我们维护数据的和谐,提升业务逻辑的效率,确保应用程序的正常运行,希望这 7 个方法能够让你在面对比较对象的任务时游刃有余!记得在比较之前处理好null的情况,以免出现空引用异常哦!祝你编程愉快!原创 2026-06-08 09:59:31 · 185 阅读 · 0 评论 -
C#最流行的两个Modbus开源库
NModbus4是 C# 中最经典的 Modbus 库,轻量稳定、文档丰富,适合简单场景和传统同步开发。Modbus.Net是更现代的模块化库,原生支持异步、自动数据转换和断线重连,适合复杂项目和现代 C# 开发模式。两者均为开源免费库,可根据项目的复杂度、开发模式(同步 / 异步)和扩展需求选择。都看到这了,如果您感觉我推荐的内容对您有帮助,希望您能伸出援手,给我打赏一元请我喝瓶水;您的支持将是我在继续分享传作路上的无限动力。如果您囊肿羞涩也没有关系,希望您多写评论予以支持,山高水常,来日在见。原创 2026-01-17 13:00:00 · 875 阅读 · 0 评论 -
c# 实现人员超时未操作登出逻辑
三、控件化设计,导致在主界面操作鼠标,空间内监测不到鼠标和按钮的操作,因此需要在控件中增加时间戳的更新,或者在控件内的公共控件或者容器增加监听,例如表格行数量变化,表格数据的该表,图表的更新等,输入框内容有更改,单选按钮有更改,多选框选择Index有更改,时间选择框值改变事件;在常规的系统开发中,用户登录系统如果没有任何操作,时间超过超时的限制,就需要系统及时将登陆用户进行登出,以确保系统的安全。2.监控鼠标和键盘的操作,如果鼠标移动或者键盘有 输入,及时更新用户的登陆时间,重新计算用户登录时长;原创 2026-01-16 14:59:32 · 97 阅读 · 0 评论 -
一个简单实用的 WinForm 通用开发框架
WinformDevFramework 是一个开源、简单实用的 WinForm 通用开发框架,旨在简化WinForm应用程序开发的开源项目。它内置了一套完整的权限架构,涵盖了菜单、角色、用户、字典、日志、代码生成等一系列系统常规模块,旨在帮助开发者避免在权限管理、页面布局等基础功能上的重复劳动,从而更专注于业务逻辑的实现。原创 2025-07-22 15:18:27 · 425 阅读 · 0 评论 -
.NET Core中间件:构建高效且可扩展的Web应用程序的关键组件
作为请求处理管道中的核心组件,中间件不仅能够拦截、处理并转发HTTP请求和响应,还为开发者提供了强大的扩展能力和灵活的处理机制。在ASP.NET Core中,中间件是处理HTTP请求和响应的组件,位于请求处理管道中。中间件的注册顺序非常重要,因为它决定了中间件在请求处理管道中的执行顺序。3. 使用内置的中间件:.NET Core提供了许多内置的中间件,如身份验证、日志记录、静态文件处理等。3. 配置中间件顺序:在注册中间件时,需要仔细考虑它们的顺序,以确保请求和响应按照预期的方式进行处理。原创 2025-07-17 07:06:31 · 98 阅读 · 0 评论 -
C#如何为 Task 添加超时功能?
对于获取缓存数据,我们需要限制一下方法的执行时间,比如 3 秒,超过这个时间,可以认为拿不到缓存数据,应该直接从数据库取值。那么,能否在不修改方法的前提下,让 Task 超时时自动结束执行?原创 2025-07-16 21:08:17 · 171 阅读 · 0 评论 -
编写干净简洁的C#代码技巧
在这种情况下,当资源的位置发生变化时,必须更新所有这些神奇的字符串,否则应用程序将中断。相反,您可以做的是创建一个共享库项目,并在每个必需的项目中引用它。但是,让我们假设一个单元测试开发人员必须在您的类上进行测试,并且实际上没有C#,或者您想通过简化整个过程来取悦您的客户。Visual Studio使它变得更加容易,只要在相关的方法上面输入///,VS就会自动为您生成一个包含方法参数的注释模板。这是我一直在做的事情。基本上,变量的第一个单词的第一个字母将是小写的,后面每一个单词的第一个字母应该是大写的。原创 2025-06-19 08:56:46 · 160 阅读 · 0 评论 -
ASP.NET Core 中快速读取配置的最佳实践
实现在Program.cs全职写分享不易,如果您觉得我的文章对您有帮助的话;强烈建议您打赏一元,我买瓶水喝;原创 2025-06-13 10:54:33 · 224 阅读 · 0 评论 -
.NET 中如何实现高精度定时器
前言.NET中至少有6种定时器,但精度都不是特别高,一般在15ms~55ms之间。在一些特殊场景,可能需要高精度的定时器,这就需要我们自己实现了。本文将讨论高精度定时器实现的思路。高精度定时器一个定时器至少需要考虑三部分功能:计时、等待、触发模式。计时是进行时间检查,调整等待的时间;等待则是用来跳过指定的时间间隔。触发模式是指定时器每次Tick的时间固定还是每次定时任务时间间隔固定。原创 2025-04-16 10:31:45 · 169 阅读 · 0 评论 -
通信协议转换方案
通过此示例,您可以快速搭建一个。,实现新旧设备的无缝集成。原创 2025-04-12 13:57:06 · 402 阅读 · 0 评论 -
c# 找到字符串中,固定字符串的位置
Console.WriteLine($"位置: {match.Index}, 长度: {match.Length}");Console.WriteLine($"所有匹配位置: {string.Join(", ", allIndexes)}");Console.WriteLine($"首次出现位置(忽略大小写): {firstIndexIgnoreCase}");Console.WriteLine($"首次出现位置: {firstIndex}");// 位置: 21, 长度: 5。// 输出: 6, 21。原创 2025-04-07 09:07:53 · 570 阅读 · 0 评论 -
c#如何直接获取json中的某个值
""hobbies"": [""读书"", ""编程""]""hobbies"": [""读书"", ""编程""]""street"": ""中关村""""street"": ""中关村""""city"": ""北京"",""city"": ""北京"",原创 2025-03-11 17:06:47 · 1009 阅读 · 0 评论 -
c#中使用时间戳转换器
在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。原创 2025-03-10 11:40:40 · 786 阅读 · 0 评论 -
二叉搜索树算法实现原理
二叉搜索树的各项操作的时间复杂度都是对数阶,具有稳定且高效的性能。只有在高频添加、低频查找删除数据的场景下,数组比二叉搜索树的效率更高。二叉搜索树(Binary Search Tree,简称BST)是一种节点有序排列的二叉树数据结构。对于每个节点,其左子树的所有节点值都小于该节点值,其右子树的所有节点值都大于该节点值。用作系统中的多级索引,实现高效的查找、插入、删除操作。删除节点:从树中删除特定值的节点,并维护树的结构。定义节点类:包含节点值、左子节点和右子节点。搜索节点:根据节点值在树中查找特定值。原创 2025-01-15 14:39:00 · 131 阅读 · 0 评论 -
算法:二分查找
二分查找算法是一种在中查找特定元素的搜索算法。原创 2025-01-07 18:02:59 · 415 阅读 · 0 评论 -
c#序列化和反序列化(一)
序列化是获取内存中的对象或对象图 (一组相互引用的对象) 并将其扁平化为可以存储或传输的字节、XML、JSON或类似表示的流的行为。【方式二】:创建模型类,实现序列化存储成XML文件;反序列化是直接读取XML文件;【方式三】:创建模型类,实现序列化存储成XML文件;反序列化是直接读取XML文件;//反序列化读取数据。【方式四】:创建模型类,实现序列化存储成XML文件;反序列化是直接读取XML文件;【方式一】:创建模型类,实现序列化存储成XML文件;反序列化是直接读取XML文件;原创 2025-02-08 13:47:17 · 254 阅读 · 0 评论 -
使用 C# Attribute 实现 AOP 功能
首先,定义一个继承自Attribute的类,用于标记需要应用AOP功能的方法。这个Attribute可以被应用于任何方法上,用于指示该方法需要记录执行时间。创建一个需要应用AOP的业务类,并在需要记录执行时间的方法上标记[Timing]Console.WriteLine("正在执行业务逻辑...");// 模拟耗时操作Console.WriteLine("没有 TimingAttribute 的方法");在这个业务类中,DoWork方法被标记为需要记录执行时间。原创 2025-01-16 14:18:16 · 551 阅读 · 0 评论 -
算法:线性查找
线性查找算法简单易懂,适用于小规模数据集或无序数据集。其主要优点是实现简单,不需要对数据进行排序。然而,由于其时间复杂度为O(n),对于大规模数据集,效率较低。对于大规模数据集或需要频繁查找的场景,可以考虑使用更高效的查找算法,如二分查找(适用于有序数据集)或哈希查找。原创 2025-01-07 10:15:58 · 235 阅读 · 0 评论 -
C#编程中dynamic类型
dynamicdynamic类型为C#提供了一种灵活的方式来处理类型不确定的对象,特别是在与动态语言交互、处理动态数据结构时非常有用。然而,使用dynamic类型时也需要注意其可能带来的性能开销和类型安全问题。合理使用dynamic类型,可以在保持代码灵活性的同时,避免潜在的运行时错误。原创 2025-01-06 16:17:58 · 445 阅读 · 0 评论 -
c#中集中常见的集合去重方式
// 使用自定义的比较器和循环遍历if (!/// 自定义的比较器。原创 2025-01-03 08:53:18 · 360 阅读 · 0 评论 -
接口和抽象类的对比
接口中的所有成员默认都是公共的,并且是抽象的。可以包含抽象方法(没有实现的方法),也可以包含具体实现的方法(有实现的方法)。总的来说,抽象类更适合用于提供部分实现和共享状态,而接口更适合用于定义类之间的合同,即明确定义类应该具备哪些行为。当一个类继承抽象类时,它必须实现抽象类中所有的抽象成员,除非该类也被声明为抽象类。当一个类实现接口时,它必须实现接口中所有的成员,否则该类也必须被声明为抽象类。一个类只能直接继承一个抽象类,但可以同时实现多个接口。抽象类可以包含字段和具体实现,因此可以包含状态。原创 2024-12-31 14:26:12 · 149 阅读 · 0 评论 -
c#中using语句
using语句是 C# 中一个非常有用的语法结构,它简化了资源管理,确保资源在使用后能够被自动释放。通过合理使用using语句,可以提高代码的可读性和可靠性,避免资源泄露和内存泄漏等问题。掌握using语句的用法和原理,将有助于开发者编写更高效、更安全的代码。原创 2024-12-26 15:26:47 · 545 阅读 · 0 评论 -
串口通讯Serial Communication
串口通信(Serial Communication)是通过串行接口在设备间传输数据的方式。数据在串口通信中以位为单位,通过单一通道逐位顺序传输。这种方式相较于并行通信虽然速度较慢,但它所需的连接线路少,更适合于长距离通信和简化设备接口。C# 提供了强大的串口通信支持,通过SerialPort类和库,开发者可以方便地实现串口设备的控制和数据交互。在实际应用中,需要根据具体的需求和场景,合理配置串口参数、处理数据通信和错误,并注意多线程通信的线程安全。原创 2024-12-24 12:01:31 · 619 阅读 · 0 评论 -
c#实现PDF文件的合并
通过本文的介绍,你已经学会了如何使用C#和Spire.PDF库来批量合并PDF文档。这个示例代码可以作为一个基础,你可以根据自己的需求进行扩展和优化。希望这篇技术文章能帮助你在实际项目中更高效地处理PDF文件。提示Spire.PDF虽然能快速实现pdf文件的加载和合并功能,但是是付费插件,因此在使用的时候需要考虑经济状况。原创 2024-10-24 10:50:12 · 1000 阅读 · 2 评论 -
C# 异步编程与多线程简析
C# 中的ThreadThreadPool和Task各有优缺点,适用于不同的场景。在实际开发中,应根据具体需求和场景选择合适的机制。掌握这三种机制的使用,能够帮助我们更好地实现异步编程和多线程,提高应用程序的性能和响应性。原创 2024-12-24 10:32:14 · 358 阅读 · 0 评论 -
c# object和dynamic的区别
object是 C# 中所有类型的基类。每个类型,无论是值类型还是引用类型,都直接或间接继承自object。使用object类型可以存储任何类型的数据,但由于它是非特定的,所以在使用时通常需要进行类型转换。dynamic关键字用于在编译时绕过强类型检查。dynamic类型的变量在运行时解析类型,这使得你可以在运行时动态地调用成员。dynamic类似于object,但区别在于dynamic类型的成员访问是通过动态绑定实现的。object和dynamic在 C# 中各有其独特的使用场景和优势。object。原创 2024-09-29 10:34:53 · 642 阅读 · 0 评论 -
字符串判空的几种方式
方法三 :但是IsNullOrEmpty在字符串为" ","\n","\t",时候就无能为力了,为了覆盖这些场景,高手们一般判空使用方法IsNullOrWhiteSpace。这样针对str = ""也是可以的,但是大多数场景是在方法的 入口处判空,这个字符串有可能是null,也有可能是" ",甚至是"\n",上面这种判空方法显示不能覆盖这么多场景;运行结果:a is empty。原创 2024-09-14 08:48:28 · 1168 阅读 · 0 评论 -
ASP.NET Core 中的 CRUD 操作
我们的披萨服务支持对披萨列表执行 CRUD 操作。这些操作是通过 HTTP 谓词执行的,它们通过 ASP.NET Core 属性进行映射。正如你所了解的,HTTPGET谓词用于从服务检索一个或多个项。此类操作使用[HttpGet]属性进行批注。GET你已经了解了GET操作的工作原理。让我们来详细了解一下POSTPUT和DELETE操作。原创 2024-09-14 17:34:00 · 592 阅读 · 0 评论
分享