C#
文章平均质量分 50
学习C#的笔记
一颗大樱桃
这个作者很懒,什么都没留下…
展开
-
C# 中string和stringbuilder区别
在 C# 中,string和是用于处理字符串的两种不同类型。它们之间的主要区别在于如何处理和操作字符串。stringstringstringstringstringstring因此,如果你需要频繁地对字符串进行修改和操作,建议使用,因为它可以提供更好的性能。如果字符串不需要修改,或者只需要进行少量操作,那么使用string是更简单和合适的选择。原创 2024-05-09 11:34:38 · 124 阅读 · 0 评论 -
partial
关键字的部分合并成一个完整的类、结构、接口或方法。这样,您可以在不同的文件中编写不同部分的代码,而无需将整个定义放在一个文件中。关键字,可以将一个类或其他类型的定义分散在多个文件中,这在大型项目中特别有用,可以帮助组织和管理代码。关键字用于指示一个类、结构、接口或方法的定义是分布在多个文件中的。关键字,您可以更好地组织和管理大型项目中的代码,使代码更易读和易维护。方法被声明为 partial 方法,可以在另一个部分提供实现。接口被分为两部分,分别位于不同的文件中。关键字时,编译器会将所有使用。原创 2024-04-24 00:14:12 · 131 阅读 · 0 评论 -
Redis中文乱码问题
现在查看缓存数据就变成这样的乱码了,这是由于我们写程序使用UTF-8的编码格式,但是windows控制台应用程序是GBK的编码格式,找到的原因就很好处理了。1、先查看下控制台的编码格式是否是GBK,右击Windows控制台点击。,修改控制台的编码格式为UTF-8。原创 2024-03-20 11:17:39 · 432 阅读 · 0 评论 -
Swagger不显示接口注释
1、缺少 XML 注释文件:Swagger 默认使用 XML 注释文件中的注释来生成接口文档。确保在项目的生成设置中启用了 XML 文档生成,并将生成的 XML 注释文件放置在与生成的 DLL 文件相同的目录下。2、修改Program.cs文件,在Build之前增加Swagger的配置项。,路径可以为空指向默认路径。请在右击->属性->生成。原创 2023-12-20 17:33:24 · 1135 阅读 · 0 评论 -
HTTP Error 500.21 - Internal Server ErrorHandler “aspNetCore“ has a bad module “AspNetCoreModuleV2“
Hosting Bundle (托管捆绑包)Hosting Bundle 是指托管捆绑包,是用于部署和运行 ASP.NET Core 应用程序的一种部署方式。ASP.NET Core 是一个跨平台的开发框架,可以用于构建 Web 应用程序、Web API、微服务等。在部署 ASP.NET Core 应用程序时,可以选择使用自包含的托管捆绑包(Hosting Bundle)来简化部署过程。Hosting Bundle 包含了ASP.NET Core 运行时(Runtime)和。原创 2023-12-20 17:12:30 · 448 阅读 · 0 评论 -
没有 RunInstallerAttribute.Yes 的公共安装程序
安装window服务时报“没有 RunInstallerAttribute.Yes 的公共安装程序”的问题。原创 2023-09-26 10:04:53 · 498 阅读 · 0 评论 -
C# 截取字符串
方法来截取字符串的一部分。该方法有两个参数:起始索引和要截取的字符数。,从索引为0的位置开始截取5个字符,即 “Hello”。,从索引为6的位置开始截取到字符串的末尾。在 C# 中,可以使用。在上述示例中,我们使用。在上述示例中,我们使用。原创 2023-09-20 09:52:37 · 2302 阅读 · 0 评论 -
SqlBulkCopy - 批量写入数据库
SqlBulkCopy 类利用了 ADO.NET 提供的数据访问组件和连接对象,以一种高效的方式实现了大量数据的批量插入操作。它是在连接到 SQL Server 数据库时使用的,并且为开发人员提供了一个快速、可靠的方式来处理大规模的数据插入需求。ADO.NET 是 Microsoft .NET Framework 的一部分,提供了与数据存储的连接、检索和操作相关的功能。SqlBulkCopy 是 ADO.NET 中的一种类,它提供了高性能的批量数据插入功能。在这个示例中,你需要替换。为你的实际连接字符串,原创 2023-09-12 11:41:23 · 1195 阅读 · 0 评论 -
MiniExcel
是一个在 .NET 平台上用于操作 Excel 文件的库。它的特点是轻量级、简单易用,并且支持读取和写入 Excel 文件的功能。简化了对 Excel 文件的读写操作,适用于简单的数据处理需求。相比于其他更复杂的库,是一个更轻量级的选择,对于一些小规模的 Excel 操作场景可能更加适合。方法获取第一个工作表的数据。通过索引可以访问特定的单元格数据。方法可以将数据写入 Excel 文件,并保存为指定的路径。方法可以读取 Excel 文件的数据,并使用。以上示例代码中,通过。原创 2023-09-01 10:27:08 · 2419 阅读 · 0 评论 -
关于.netcore中序列化的特性
需要注意的是,不同的序列化库可能支持不同的特性。使用DataContractSerializer进行序列化时,只有带有DataContract特性的类才会被序列化,而带有DataMember特性的属性才会被包含在序列化结果中。除了上述常用的序列化特性外,还有其他一些可以用于特定场景的序列化特性,如XmlIgnore(在XML序列化时忽略属性)、NonSerialized(在二进制序列化时忽略字段)等。在.NET Core中,有几个常用的序列化特性可以用来自定义对象的序列化和反序列化行为。原创 2023-08-27 14:26:25 · 569 阅读 · 1 评论 -
ABP项目结构
Application.Contracts 依赖Domain.Shared项目,可以在DTO中重用Domain.Shared中的类型.例如,Domain.Shared项目中的枚举类型 IssueType 同样被Contracts项目中的CreateIssueDtoDTO所引用.Domain 仅依赖Domain.Shared项目,因为Domain.Shared本就属于领域层的一部分.例如,Domain.Shared项目中的枚举类型 IssueType 被Domain项目中的Issue实体所引用.原创 2023-08-27 14:08:39 · 198 阅读 · 0 评论 -
C# 中操作集合的方法
FindLastIndex:查找符合指定条件的最后一个元素的索引。Union:合并两个集合,生成一个包含两个集合中唯一元素的新集合。TrueForAll:判断集合中的所有元素是否都满足指定条件。Aggregate:使用指定的函数将集合中的元素聚合为一个值。Except:从第一个集合中移除在第二个集合中存在的元素。Exists:判断集合中是否存在满足指定条件的元素。Contains:检查集合中是否包含指定的元素。All:判断集合中的所有元素是否都满足指定条件。Any:判断集合中是否存在满足指定条件的元素。原创 2023-08-24 00:31:25 · 1016 阅读 · 0 评论 -
堆&&&栈
栈上的内存分配和释放是自动进行的,由编译器和操作系统负责管理。栈的大小是固定的,并且变量的生命周期是确定的,一旦超出作用范围,内存将被立即释放。栈上的数据的访问速度比堆快,因为它们存储在物理内存中的连续内存区域中。堆的内存分配和释放不是自动进行的,而是由开发人员手动进行管理。堆上的数据的访问速度比栈慢,因为它们存储在物理内存中的不连续区域中。栈和堆是内存中用于存储变量和数据的两种主要方式。在实际编程中,我们通常使用栈来存储局部变量和较小的数据,而使用堆来存储动态分配的对象和较大的数据。原创 2023-08-16 00:53:04 · 125 阅读 · 0 评论 -
NPOI 读取和写入Excel
在C#中使用NPOI库读取和写入Excel文件,你需要先下载并安装NPOI库。你可以在NuGet管理器中搜索NPOI并进行安装。原创 2023-08-16 00:35:49 · 1382 阅读 · 0 评论 -
Kestrel
Kestrel 还支持基于令牌的身份验证,如 JWT(JSON Web Token),以确保只有经过授权的用户才能访问受保护的资源。总的来说,Kestrel 是一个高性能、可扩展且安全的 Web 服务器,适用于托管 ASP.NET Core Web 应用程序,并提供了多种配置选项和部署方案。它是ASP.NET Core 应用程序的关键组件之一,能够处理大量的并发请求并提供稳定的性能。它实现了一种基于事件循环的模型,使得它可以同时处理多个请求,而无需为每个请求创建一个新的线程。原创 2023-08-15 23:23:43 · 305 阅读 · 0 评论 -
ef core 分页
这些方法允许你指定当前页码和每页显示的记录数,从而实现分页查询。你可以将它们应用于你的 EF Core 查询中,根据需要进行修改和定制。:你也可以自定义一个扩展方法,将分页逻辑封装在其中,以便在多个地方重复使用。方法用于选择指定数量的记录。结合使用这两个方法,可以实现分页功能。方法用于跳过指定数量的记录,而。原创 2023-08-14 23:44:13 · 675 阅读 · 0 评论 -
NLog简单的配置
在实际的配置过程中,还可以使用各种属性和参数来自定义日志记录器的行为,如时间戳格式、过滤条件、错误处理等。NLog.config 文件是 NLog 日志记录器的配置文件,用于定义日志目标(targets)、日志规则(rules)和其他配置选项。上述示例中,定义了一个日志规则,将所有日志记录器的级别为 “Trace” 及更高级别的日志写入到名为 “file” 的目标。上述示例中,定义了一个名为 “file” 的文件日志目标,它将日志写入到名为 “logfile.txt” 的文件中。原创 2023-08-14 00:42:51 · 598 阅读 · 0 评论 -
NLog输出到pg数据库
对于 NLog 输出到 PostgreSQL 数据库,您需要使用。文件中正确配置 PostgreSQL 连接字符串,并使用包含。参数来指定使用的数据库提供程序。请根据您的数据库设置自行更改连接字符串的值。请注意,更新后的示例中添加了。原创 2023-08-14 00:39:49 · 274 阅读 · 0 评论 -
如何看到NLog的内部日志
一旦您启用了内部日志记录,您将能够在日志文件或控制台上看到更详细的 NLog 日志消息,包括与连接是否成功、插入操作是否成功相关的消息。此配置将启用内部日志记录,并将其写入指定的日志文件中。请确保您具有对日志文件路径的写入权限。根据您的需求,您可以选择在配置文件中进行配置,或在应用程序中进行配置,或同时进行配置。此配置将启用内部日志记录,并将其输出到控制台上。替换为您希望将内部日志记录输出的文件路径。在您的 NLog 配置文件的。原创 2023-08-14 00:29:59 · 180 阅读 · 0 评论 -
自定义异常类
您可以根据需求为自定义异常类添加更多的自定义属性和方法,进一步扩展其功能。在捕获和处理异常时,这些自定义属性和方法可以为您提供更多的上下文和异常详细信息,以辅助调试和问题排查。属性,它会在异常的实例化时自动设置为当前时间。在这个示例中,自定义异常类。原创 2023-08-12 14:55:04 · 26 阅读 · 0 评论 -
IOC容器
DIP(依赖倒置原则):DIP(Dependency Inversion Principle)是SOLID设计原则中的一条原则,指导了代码的依赖关系设计。IOC(控制反转):IOC(Inversion of Control)是一种软件设计思想,通过将对象的创建和依赖关系的解析交给外部容器来进行管理。简而言之,DI是一种设计模式,DIP是一种设计原则,IOC是一种设计思想,而IOC容器是实现IOC思想的具体实现工具。使用IOC容器可以将对象的创建和管理交给容器,实现松耦合、可测试和可扩展的代码。原创 2023-08-11 18:56:19 · 770 阅读 · 0 评论 -
.net core的Knife4jUI,让swagger更精致
首先,安装 IGeekFan.AspNetCore.Knife4jUI NuGet 包。可以通过 Visual Studio 的 NuGet 包管理器或者 .NET CLI 进行安装。这样就完成了 IGeekFan.AspNetCore.Knife4jUI 的配置。您可以在启动应用程序后,访问。(具体地址取决于您的应用程序配置)来查看生成的 Swagger UI。原创 2023-08-10 00:55:49 · 1847 阅读 · 0 评论 -
.net core 配置swagger
方法上添加了一个简单的 Swagger 注释。您可以使用不同的标记和注释来配置 Swagger 文档的其他元素,例如路由参数、请求体、响应等。配置完毕后,您就可以使用 Swagger 来浏览和测试 API 了。Swagger 提供了一个交互式界面,可以通过调用不同的 API 方法来查看请求和响应的详细信息。要访问 Swagger UI,请启动应用程序,并在浏览器中打开。在需要使用 Swagger 的控制器或方法上添加 Swagger 注释。在上述代码中,Swagger UI 将在。在上述代码中,我们在。原创 2023-08-10 00:27:53 · 890 阅读 · 0 评论 -
DocX 生成Word
还可以根据自己的需求使用DocX库进行更复杂的操作,如插入图片、设置样式等。首先,确保你在项目中安装了DocX库。你可以在NuGet包管理器中搜索并安装。在这个示例中,我们首先创建了一个新的Word文档对象,并使用。方法插入了一个标题和一个段落。方法将其插入到文档中。方法创建了一个有序列表,并使用。原创 2023-08-08 01:23:12 · 1619 阅读 · 0 评论 -
EPPlus 读取和生成Excel
请注意替换代码中的"path_to_your_excel_file.xlsx"为你的本地Excel文件的路径。这个示例代码打开一个Excel文件,读取第一个工作表的所有单元格,并对每个单元格的值进行处理。你可以根据自己的需求在遍历过程中进行相应的操作,比如将数据存储到集合中。,以实现单元格"A1"和"B1"的合并。这将把"A1"和"B1"单元格合并为一个单元格。接口,你可以获取到生成的Excel文件,并在前端进行下载。需要注意的是,你需要确保在控制器中引入了。在上述示例中,我们在设置数据之后,通过将。原创 2023-08-08 01:11:55 · 1471 阅读 · 0 评论 -
iTextSharp 生成PDF
示例代码定义了一个名为PdfController的API控制器,其中的GeneratePdf方法创建了一个新的PDF文档,并将内容添加到文档中。最后,将文档内容转换为字节数组,并通过File方法返回给前端。注意,你需要在你的项目中添加对iTextSharp库的引用。当调用/api/pdf接口时,将返回一个带有生成的PDF文件的响应。你可以将其用于前端下载或进一步处理。原创 2023-08-08 00:44:00 · 1735 阅读 · 0 评论 -
Dapper 微型orm的光
Dapper是一个轻量级的ORM(对象关系映射)框架,它可以方便地将数据库查询结果映射到.NET对象上,同时也支持执行原生SQL查询。下面我将详细介绍Dapper的使用方法。原创 2023-08-07 18:11:16 · 759 阅读 · 0 评论 -
ADO.NET之SQL Server
数据提供程序是用于连接到特定数据库系统并执行数据库操作的组件。常见的数据提供程序包括SqlClient(用于连接到Microsoft SQL Server)、OracleClient(用于连接到Oracle数据库)等。:数据集是ADO.NET中的一个重要概念,它是一个内存中的数据容器,用于存储从数据库中检索到的数据。:数据表适配器是用于从数据库中检索数据并将其填充到数据集中的组件。它提供了一种以统一的方式连接到各种数据库系统并执行数据库操作的方法。中的每一行,并根据每一行的数据创建一个。原创 2023-08-06 23:47:10 · 645 阅读 · 0 评论 -
ASP.NET Core SignalR
总结来说,ASP.NET Core SignalR是一个用于构建实时网络应用程序的框架,它使用WebSocket作为传输协议,提供了简单和高效的双向通信方式。它具有灵活的API和丰富的功能,适用于各种实时应用的开发需求。ASP.NET Core SignalR提供了一些强大的功能,例如群组(Group)管理、消息广播、连接保持、身份验证等。ASP.NET Core SignalR是一个开发实时网络应用程序的框架,它使用WebSocket作为传输协议,并提供了一种简单和高效的方式来实现实时双向通信。原创 2023-08-06 22:01:25 · 890 阅读 · 1 评论 -
C#中的Invoke
与第一种方式相比,这种方式更加简洁,但使用委托调用方法需要确保委托的签名与要调用的方法的签名匹配。第一个参数是要调用方法的对象实例,如果方法是静态的,则可以传递。是一个用于调用方法的方法,它能够在运行时动态地调用一个方法。第二个参数是方法的参数数组,如上面我们调用Sell方法。等异常,所以在实际使用中应该进行异常处理。在上面的示例中,我们首先创建了一个。方法都可以用于调用方法并传递参数。在上面的示例中,我们首先通过。委托对象,并将其初始化为。方法的调用可能会引发。原创 2023-08-06 17:20:37 · 2405 阅读 · 0 评论 -
.net core ConfigureServices和Configure
通过这两个方法的配合使用,你可以完成应用程序所需的服务注册和管道配置,使得应用程序可以以正确的方式处理HTTP请求。方法用于配置应用程序的HTTP请求处理管道。在该方法内,你可以添加中间件,配置路由、授权、异常处理等。在该方法内,你可以注册应用程序所需要的各种服务、中间件和其他依赖项。参数,你可以通过调用该参数的方法来添加中间件和配置管道。参数,你可以通过调用该参数的方法来注册服务。方法在应用程序启动时执行,它负责配置服务的注册。方法在启动时执行,它负责配置中间件和管道的顺序。在上面的示例中,我们使用。原创 2023-08-05 23:37:21 · 1537 阅读 · 0 评论 -
.net core 中间件
每个中间件都会处理请求,并将请求传递给下一个中间件,直到达到最后一个中间件,最后一个中间件将生成HTTP响应并将其返回给客户端。每个中间件既可以在请求传递给下一个中间件之前进行处理,也可以在请求传递给下一个中间件之后进行处理,这取决于中间件的实现。中间件是管道中的组件,用于处理请求和响应。总结起来,管道是一个抽象的概念,表示请求和响应经过的处理流程,而中间件是管道中的组件,用于处理请求和响应以实现特定的功能。以上只是一些常见的中间件示例,你可以根据应用程序的需求选择合适的中间件来处理不同的功能和行为。原创 2023-08-05 23:09:21 · 1329 阅读 · 0 评论 -
.net core 依赖注入生命周期
在.NET Core中,依赖注入的生命周期用于控制注入的服务实例的生命周期。:在整个应用程序生命周期内只创建一个实例。每次注入都返回同一个实例。:在每个作用域内创建一个实例。通常是在每个请求或操作中创建一个实例。在同一个作用域内,每次注入都返回同一个实例。:每次注入都创建一个新的实例。没有共享实例,每次注入都会返回一个新的实例。原创 2023-08-05 15:09:51 · 1071 阅读 · 0 评论 -
dotnet core方法拦截器
在 C# 中实现方法拦截器可以使用动态代理技术。以下是一种常用的实现方法拦截器的方式:首先,请确保您的项目文件中包含了以下依赖项:原创 2023-07-25 18:06:05 · 188 阅读 · 0 评论 -
设计模式 - 适配器模式
在上述代码中,客户端类(Client)通过适配器类(Adapter)使用电源适配器(Adaptee),将非标准的电压输出接口转换为标准的电压输出接口。适配器模式的主要思想是通过一个适配器类将不兼容的接口转换为兼容的接口,从而使得原本不兼容的类可以一起工作。适配器类(Adapter):适配器类实现了目标接口,并持有一个适配者类的实例,通过适配者类的接口将客户端的请求转发给适配者类。需要注意的是,示例中仅使用了一个适配器类进行适配,但实际情况中可能会存在多个适配器类的组合使用以适配多个不兼容的接口。原创 2023-07-21 00:10:54 · 47 阅读 · 0 评论 -
设计模式 - 抽象工厂模式
通过抽象工厂模式,我们可以根据具体工厂来创建相应的产品,而无需关心具体的产品类是如何创建的。抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个接口用于创建相关或依赖对象的家族,而无需指定具体类。在抽象工厂模式中,有一个抽象工厂类定义了创建产品的方法,具体的工厂子类实现了这些方法来创建具体的产品。抽象工厂模式主要解决了创建一系列相关或依赖对象的问题,它能够确保创建的对象是相互兼容的。好的,我们以一个简单的图形库为例来说明抽象工厂模式在C#中的应用。原创 2023-07-20 23:58:03 · 44 阅读 · 0 评论 -
C# 静态变量和非静态变量的区别
生命周期:静态变量的生命周期与应用程序的生命周期一致,它会在应用程序启动时初始化,并在应用程序关闭时销毁。非静态变量的生命周期与对象的生命周期相关,它会在对象创建时初始化,并在对象销毁时销毁。非静态变量在对象创建时被分配内存,并在对象销毁时释放内存。总的来说,静态变量适用于多个对象之间需要共享数据或状态的情况,而非静态变量适用于每个对象需要独立拥有的数据或状态。对象关联:非静态变量属于对象的一部分,每个对象都有自己的一份非静态变量。而每个对象都有自己的非静态变量,它们是独立的,每个对象都有自己的一份副本。原创 2023-07-19 00:15:34 · 199 阅读 · 0 评论 -
设计模式 - 单例模式
通过单例模式,可以确保在系统中只有一个类的实例存在,可以提供一个全局的访问点来获取该实例,方便地在不同的地方使用。需要注意的是,在多线程环境下,要特别关注线程安全性,可以使用双重检查锁定等方式来保证实例的唯一性和线程安全性。在方法内部,检查静态私有变量是否为空,如果为空则创建一个新的实例并赋值给该变量,然后返回该实例;单例模式(Singleton Pattern)是一种创建型设计模式,用于确保一个类只有一个实例,并提供一个全局的访问点。静态私有变量:在类内部定义一个静态私有变量,用于保存类的唯一实例。原创 2023-07-19 00:00:02 · 34 阅读 · 0 评论 -
设计模式 - 工厂模式
通过工厂模式,客户端代码与具体产品对象之间解耦,可以根据需要选择使用具体的工厂来创建产品,而无需了解具体产品的创建细节。这种设计可以提高代码的灵活性和可维护性。如果需要添加一种新的产品,只需要增加对应的具体产品和具体工厂,而无需修改现有的代码。方法来创建对应的产品。每个具体工厂创建了具体产品的实例,然后客户端通过工厂来创建产品并调用其操作方法。定义了一个抽象工厂类,具体的工厂。分别继承自抽象工厂类,并实现了。原创 2023-07-18 23:29:48 · 30 阅读 · 0 评论 -
设计模式详解
以下是一些常见的设计模式:原创 2023-07-18 00:15:49 · 39 阅读 · 0 评论