
【专题】C#系列
文章平均质量分 86
Microi风闲
三天不学习
展开
-
【C#实战】动态模板替换:根据Model字段名称自动匹配替换值【代码之美】
在日常开发中,我们经常遇到需要根据数据模型动态生成文本内容的需求,比如邮件模板、报告生成、消息通知等场景。传统的方式是为每个字段硬编码替换逻辑,但当模板或模型变更时,维护成本很高。本文将介绍如何使用C#反射机制实现一个灵活的模板引擎,能够根据Model字段名称自动匹配并替换模板中的占位符。提示:以下是本篇文章正文内容,下面案例可供参考灵活性:模板与代码解耦,修改模板无需重新编译可维护性:添加新字段只需修改模板和模型扩展性:支持格式控制、嵌套对象等高级功能性能优化:通过缓存和预编译提升执行效率。原创 2025-04-02 14:34:55 · 657 阅读 · 7 评论 -
C# 泛型中的协变和逆变
💎协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性。在引用类型系统时,协变、逆变和不变性具有如下定义。这些示例假定一个名为Base的基类和一个名为Derived的派生类。Covariance使你能够使用比原始指定的类型派生程度更大的类型。你可以将的实例分配给类型的变量。原创 2025-01-07 22:38:09 · 1133 阅读 · 5 评论 -
C# LINQ 查询基础篇【代码之美系列】
语言集成查询(LINQ) 是一系列直接将查询功能集成到C#语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或支持。SQL数据库、XML文档、各种Web服务等。借助LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。使用查询语法,可以用最少的代码对数据源执行筛选、排序和分组操作。可使用相同的基本查询表达式模式来查询和转换SQL数据库、ADO .NET数据集、XML。原创 2024-12-30 21:07:07 · 912 阅读 · 6 评论 -
C#高级篇 反射和属性详解【代码之美系列】
🤖反射当您必须访问程序元数据中的属性时。有关更多信息,请参阅检索存储在属性中的信息。用于检查和实例化程序集中的类型。用于在运行时构建新类型。使用中的类。为了执行后期绑定,访问在运行时创建的类型的方法。请参阅动态加载和使用类型一文。可通过定义特性类创建自己的自定义特性,特性类是直接或间接派生自Attribute的类,可快速轻松地识别元数据中的特性定义。假设希望使用编写类型的程序员的姓名来标记该类型。可能需要定义一个自定义Author} }} }} }} }原创 2024-12-30 20:32:36 · 1388 阅读 · 1 评论 -
C# 异步编程模型【代码之美系列】
通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力。但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写、调试和维护。C#支持简化的方法,即异步编程,它利用.NET运行时中的异步支持。编译器可执行开发人员曾进行的高难度工作,且应用程序保留了一个类似于同步代码的逻辑结构。因此,你只需做一小部分工作就可以获得异步编程的所有好处。本主题概述了何时以及如何使用异步编程,并包括指向包含详细信息和示例的支持主题的链接。原创 2024-12-25 22:11:57 · 1074 阅读 · 11 评论 -
C# 中的记录类型简介 【代码之美系列】
C#中的记录是一个类或结构,它为使用数据模型提供特定的语法和行为。record修饰符指示编译器合成对主要角色存储数据的类型有用的成员。这些成员包括支持值相等的ToString()和成员的重载。记录声明中提供的每个位置参数的公共自动实现属性。对于record和t 类型,为record属性。对于类型,为读写属性。主构造函数,它的参数与记录声明上的位置参数匹配。对于类型,则是将每个字段设置为其默认值的无参数构造函数。一个方法,对记录声明中提供的每个位置参数都有一个out参数。原创 2024-12-25 21:07:00 · 1165 阅读 · 0 评论 -
C# 强大无匹的模式匹配,让代码更加优雅【代码之美系列】
long long ago , 我们在处理复杂的业务逻辑时可能会写很多if else语句,看着堆叠如山的屎山代码自己都心虚。以前没办法,因为没有更强大的语法糖🍬做背书,巧妇难为无米之炊啊。自从C#匹配模式增强之后,我看了很多官方的案例,太巧妙了,太优雅了。今天就来一起看看有哪些优雅的模式。使用表达式switch语句和is将输入表达式与任意数量的特征匹配。C#支持多种模式,包括声明、类型、常量、关系、属性、列表、var和弃元。可以使用布尔逻辑关键字andor和not组合模式。is表达式switch语句。原创 2024-12-24 20:54:48 · 739 阅读 · 6 评论 -
C# 一文讲透 类型参数约束 【代码之美系列】
🎖️约束告知编译器类型参数必须具备的功能。 在没有任何约束的情况下,类型参数可以是任何类型。 编译器只能假定 System.Object 的成员,它是任何 .NET 类型的最终基类。原创 2024-12-08 19:22:15 · 835 阅读 · 1 评论 -
C# 代码约定 【代码之美系列】
🎯对于在开发团队中维护代码可读性、一致性和协作至关重要。遵循行业实践和既定准则的代码更易于理解、维护和扩展。大多数项目通过代码约定强制要求样式一致。和项目并不例外。在本系列文章中,你将了解我们的编码约定和用于强制实施这些约定的工具。你可以按原样采用我们的约定,或修改它们以满足团队的需求。🎀拥有良好的编码习惯和规范可以让代码更赏心悦目。团队中的每一个人,对规范的理解是不统一的,任何团队开发中都需要规范,有统一的代码规范,肯定会事半功倍,方便维护。拒绝屎山代码从你做起,对,是从你做起。🤣。原创 2024-12-06 21:47:44 · 871 阅读 · 6 评论 -
C# 命名规则和约定 【代码之美系列】
🎀拥有良好的编码习惯和规范可以让代码更赏心悦目。团队中的每一个人,对规范的理解是不统一的,任何团队开发中都需要规范,有统一的代码规范,肯定会事半功倍,方便维护。拒绝屎山代码从你做起,对,是从你做起。🤣。原创 2024-12-06 20:51:46 · 660 阅读 · 0 评论 -
C#.Net筑基 - 常见类型
UTC(Coordinated Universal Time)世界标准时间(协调时间时间),简单理解就是 0时区的时间,是国际通用时间。它与0度经线的平太阳时相差不超过1秒,接近格林尼治标准时间(GMT)。**格林尼治标准时间(Greenwich Mean Time,GMT)**是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。📢 由于地球在它的椭圆轨道里的运动速度不均匀,因此GMT是不稳定的。原创 2024-11-26 20:46:06 · 1033 阅读 · 0 评论 -
C#.Net筑基-类型系统
⁉️什么时候需要自定义相等比较?提高比较速度,多用于自定义结构体。修改相等比较的语义,基于实际业务需要自定义相等的规则,如System.Url、String.String 都是引用类型,只要字符值相同则相等(== 和 Equals)。⁉️如何自定义相等比较?重写和Equals()方法。这两个一般是一起配对重写,需注意 二者的一致性。(可选)重载!和==。(可选)实现 IEquatable接口。📢是基类 Object 的一个虚方法,该方法用于获取一个对象的 Int32 类型的散列码。原创 2024-11-26 20:37:07 · 799 阅读 · 0 评论 -
C#.Net 筑基-运算符
C#内置了丰富的运算符操作类型,使用方便,极大的简化了编码,同时还支持多种运算符重载机制,让自定义的类型也能支持运算符行为。原创 2024-11-26 20:27:20 · 663 阅读 · 0 评论 -
【过滤器】一文了解 .NET Core 中各种 Filter
ASP.NET Core中,Filter(过滤器)是一种强大的机制,允许你在请求处理管道中的特定阶段运行代码。这些过滤器提供了在请求的不同阶段执行逻辑的能力,比如授权、日志记录、异常处理等。ASP.NET Core 提供了多种类型的过滤器,每种类型都在请求处理管道的不同阶段运行原创 2024-11-24 12:55:01 · 909 阅读 · 0 评论 -
.NET Core 使用IOptions 优雅地读取配置、注入依赖、配置日志
在.NET Core中,控制台程序不仅是简单的命令行应用,它也可以是一个功能强大的、可配置和可扩展的应用程序。是.NET Core项目中的标准配置文件,用于存储应用程序的设置。在控制台应用程序中,您可以轻松地读取这个文件中的值。使用依赖注入(DI)模式,您可以轻松地将服务注入到控制台应用程序中。方法中,您可以注册服务并指定它们的作用域(例如,单例、作用域或瞬态)。到服务容器中,这样我们就可以在应用程序的任何地方注入。然后,在您的控制台应用程序中,创建一个配置类来映射。到您的项目中,并填充必要的配置信息。原创 2024-11-15 00:37:27 · 383 阅读 · 0 评论 -
ASP.NET Core 中利用环境变量动态加载多个 appsettings.json 文件
然而,根据不同的环境(如开发环境、测试环境、生产环境),这些配置信息可能会有所不同。ASP.NET Core 提供了灵活的方式来支持多个配置文件,并可以根据环境变量动态加载不同的配置。文件,ASP.NET Core 提供了灵活的方式来管理不同环境下的配置信息。来确定当前运行环境。文件包含所有环境共通的配置信息,然后为每个环境创建特定的配置文件来覆盖或添加特定于该环境的配置。提供了灵活的方式来读取配置信息,支持按键名直接访问,也支持使用路径来访问嵌套的配置信息。文件只包含开发环境中特定的配置,如日志级别等。原创 2024-11-15 00:31:10 · 355 阅读 · 0 评论 -
C#.Net筑基-解密委托与事件
委托是一种用来包装方法的特殊类型,可以将方法包装为对象进行传递、调用,类似函数指针。delegate关键字用来定义一个委托类型,语法类似方法申明,可以看做是一个“方法签名模板”,和方法一样定义了方法的返回值、参数。用delegate定义的委托是一个类,继承自 System.MulticastDelegate、System.Delegate,“方法名”就是委托类型的名称。委托的使用同其他普通类型,实例指向一个方法的引用,该方法的申明和委托定义的“方法签名模板”须匹配(支持协变逆变。原创 2024-11-14 00:43:35 · 962 阅读 · 0 评论 -
C#.Net筑基-集合知识大全
Net 中提供了一系列的管理对象集合的类型,数组、可变列表、字典等。从类型安全上集合分为两类,和,传统的非泛型集合存储为Object,需要类型转。而泛型集合提供了更好的性能、编译时类型安全,推荐使用。原创 2024-11-14 00:37:07 · 768 阅读 · 0 评论 -
C#.NET体系图文概述—2024最全总结
C#是一种简单、现代、面向对象和类型安全的编程语言。.NET是由 Microsoft 创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,如Web、移动、桌面等。.NET框架有多个实现,如.NET Core(及后续的.NET 5+版本),以及社区版本Mono。除此以外,C#.NET体系还有很多概念,本文就来简单了解下C#、.NET Framework、CLR、.NETCore、CTS、JIT等概念。原创 2024-11-14 00:26:24 · 929 阅读 · 0 评论 -
Asp.net下载文件几种方式
protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 代码如下: *原创 2016-04-06 14:07:50 · 3877 阅读 · 0 评论 -
Path.Combine (合并两个路径字符串)方法的一些使用细节
System.IO.Path.Combine 简单来说,就是合并两个路径字符串。比如如下调用,Path.Combine(@"C:\11","aa.txt") 返回的字符串路径如后: C:\11\aa.txt这个方法的声明如下:public static string Combine ( string path1, string path2 )我们在合并一些目录的时候,它的两个参数有原创 2017-09-12 10:19:01 · 1087 阅读 · 0 评论 -
C#7.0中有哪些新特性?
C#7.0 增加了许多新功能,并专注于数据消费,简化代码和性能的改善。或许最大的特性就是元组和模式匹配,元组可以很容易地拥有多个返回结果,而模型匹配可以根据数据的“形”的不同来简化代码。我们希望,将它们结合起来,从而使你的代码更加简洁高效,也可以使你更加快乐并富有成效。请点击 Visual Studio 窗口顶部的反馈按钮,告诉我们哪些是你不期待的特性或者你关于提升这些特性的思考。还有许多原创 2017-06-19 16:11:22 · 562 阅读 · 0 评论 -
C#6.0中10大新特性的应用和总结
微软发布C#6.0、VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家。微软于2015年7月21日发布了Visual Studio 2015, .NET 2015, .NET Framework 4.6, ASP.NET 4.6, Azure SDK 2.7 for .NET, C# 6.0, F# 4.0, Typ原创 2017-01-12 14:04:08 · 7057 阅读 · 1 评论 -
C# 5.0五大新特性
第一:绑定运算符,:=:这个只是简化了数据绑定,跟ASP.NET MVC3不断改进一样,其实不是什么亮点改进。comboBox1.Text :=: textBox1.Text; //将文本框的内容绑定到下拉框。第二:带参数的泛型构造函数:这个的加入给一些设计增加了强大功能,泛型早在C#2.0加入后就有着强大的应用,一般稍微设计比较好的框架,都会用到泛型,C#5.0加原创 2017-01-12 14:15:05 · 9684 阅读 · 1 评论 -
C#中Socket通信编程的异步实现
本文将在C#中Socket同步通信的基础上,分析和研究Socket异步编程的实现方法,目的是深入了解Socket编程的基本原理,增强对网络游戏开发相关内容的认识。什么是Socket编程的异步是实现所谓Socket编程的异步实现是指按照异步过程来实现Socket编程,那么什么是异步过程呢,我们把在完成了一次调用后通过状态、通知和回调来告知调用者的方式成为异步过程,换句话说,在异步过程原创 2016-06-30 15:49:26 · 33509 阅读 · 8 评论 -
相同结构的两个类赋值
public static D Mapper(S s) { D d = Activator.CreateInstance(); try { var sType = s.GetType(); var dType = typeof(D);原创 2017-02-21 10:22:01 · 1301 阅读 · 0 评论 -
VSCode的快捷键
前言VSCode的快捷键继承了一些IDE风格,有VS的身影,也有Emacs的身影。。简言之,内置快捷键玩熟了,效率提高不是一点两点。VsCode 快捷键有五种组合方式(科普)Ctrl + Shift + ? : 这种常规组合按钮Ctrl + V Ctrl +V : 同时依赖一个按键的组合Shift + V c : 先组合后单键的输入Ctrl + Click: 键盘 + 鼠标点击原创 2017-12-13 16:43:25 · 519 阅读 · 0 评论 -
NPOI使用手册
NPOI使用手册目录1.认识NPOI2. 使用NPOI生成xls文件2.1 创建基本内容2.1.1创建Workbook和Sheet2.1.2创建DocumentSummaryInformation和SummaryInformation2.1.3创建单元格2.1.5创建批注2.1.6创建页眉和页脚2.2 单元格操作2.2.1设置格式2.2.2合并单元格2.2.3对齐相关设置2.2.4使用边框...原创 2016-04-19 17:07:12 · 2586 阅读 · 0 评论 -
ASP.NET反射
两个现实中的例子:1、B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况。这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音”反射,然后把“回音”进行处理就可以显示出内脏的情况了(我不是医生也不是声学专家,不知说得是否准确^_^)。2、地球内部结构:地球的内部结构大体可以分为三层:地壳、地原创 2016-04-06 11:43:35 · 1026 阅读 · 0 评论 -
学通C#网络编程——第四篇 TCP应用编程
年底了,人浮躁多了,沉不下去心研究技术了,不过昨天终于抢到了回家的票,很开心。 言归正卷,在WCF出来之后,可能我们玩这些原始的TCP越来越少了,我们知道WCF对TCP进行了再一次的包装,第一反应给我们的或许是同构系统用TCP,异构系统用HTTP,那么问题来了,异构系统到底可不可以用TCP呢?至少WCF是玩不了的,因为其他语言没有针对.net的“服务引用”,也没有什么原创 2017-01-11 15:07:08 · 526 阅读 · 0 评论 -
C#网络编程——第三篇 HTTP应用编程(下)
第三篇来的好晚啊,上一篇说了如何向服务器推送信息,这一篇我们看看如何"快好准"的从服务器下拉信息。 网络上有很多大资源文件,比如供人下载的zip包,电影(你懂的),那么我们如何快速的进行下载,大家第一反应肯定就是多线程下载,那么这些东西是如何做的呢?首先我们可以从“QQ的中转站里面拉一个rar下来“。然后用fiddler监视一下,我们会发现一个有趣的现象:第一:7.62*原创 2017-01-11 15:03:14 · 822 阅读 · 0 评论 -
C#网络编程——第二篇 HTTP应用编程(上)
我们学习网络编程最熟悉的莫过于Http,好,我们就从Http入手,首先我们肯定要了解一下http的基本原理和作为,对http的工作原理有一定程度的掌握,对我们下面的学习都是有很大帮助的。一: 工作方式 ①:client和server建立可靠的TCP连接。 ②:然后client通过Socket向server发送http请求。 ③:s原创 2017-01-11 15:01:21 · 574 阅读 · 0 评论 -
TOKEN+签名验证
首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题,例如:请求来源(身份)是否合法?请求参数被篡改?请求的唯一性(不可复制),防止请求被恶意攻击为了保证数据在通信时的安全性,我们可以采用TOKEN+参数签名的方式来进行相关验证。原创 2018-01-10 11:36:46 · 817 阅读 · 0 评论 -
asp.net 枚举转换
一、在学习枚举之前,首先来听听枚举的优点。 1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。 2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。 3、枚举使代码更易输入。二、枚举说明 1、简单枚举枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用publi原创 2016-04-06 14:13:37 · 2215 阅读 · 0 评论 -
C# 浅拷贝与深拷贝区别
也许会有人这样解释C# 中浅拷贝与深拷贝区别:浅拷贝是对引用类型拷贝地址,对值类型直接进行拷贝。不能说它完全错误,但至少还不够严谨。比如:string 类型咋说?其实,我们可以通过实践来寻找答案。首先,定义以下类型:int 、string 、enum 、struct 、class 、int[ ] 、string[ ]代码如下:原创 2016-04-06 11:20:08 · 496 阅读 · 0 评论 -
获取应用程序根目录物理路径(Web and Windows)
这两个计划写一个小类库,需要在不同项目下任意调用。该类库需要对磁盘文件进行读写,所以就需要获取程序执行的磁盘路径,就简单的对获取磁盘路径的方法进行研究。 借助搜索引擎,我从网上搜罗来多种方法,都可以直接或间接的获取到应用程序执行的根目录。大概总结一下,一共有以下 11 种: Server.MapPath("~") //使用 HTTP 上下文中的 Server 对象来获取Web站点的根...原创 2017-09-12 10:27:30 · 2095 阅读 · 0 评论 -
fullavatareditor 富头像上传编辑器
富头像编辑器是一个很好的头像图片上传控件,能够对图片进行简单的处理,例如:剪切、调节亮度等功能;富头像编辑器拥有很的参数配置,可根据自己的需要配置控件的功能;该控件要求浏览器需安装Flash Player后才能使用;下面是我做的一个小的Demo以说明富头像编辑器的使用方法。1.前台页面 需引用js文件和初始化富头像编辑器,脚本代码如下: Simple d原创 2017-12-05 15:00:03 · 4345 阅读 · 0 评论 -
协变、逆变、不变体
简述什么是协变性、逆变性、不变性协变性,如:string->object (子类到父类的转换)逆变性,如:object->string (父类到子类的转换)不变性,基于上面两种情况,不可变。具体下面再做分析。泛型委托的可变性先使用框架定义的泛型委托Func和Action做例子(不了解的请戳)协变:(string->object)Funcstrin原创 2017-02-17 10:06:05 · 483 阅读 · 0 评论 -
.NET执行sql文件
//执行脚本 string infile = System.Web.HttpContext.Current.Server.MapPath("/Plguin/target/SQLQuery4.sql"); Process sqlprocess = new Process(); sq原创 2016-04-06 14:04:43 · 1455 阅读 · 0 评论 -
DataTable转JSON
#region dataTable转换成Json格式 /// /// dataTable转换成Json格式 /// /// /// public static string ToJson(DataTable dt) { StringBuilder jsonBuilder原创 2016-04-06 11:35:28 · 621 阅读 · 0 评论