
.Net C#
文章平均质量分 61
.NET 基本语法介绍
厦门德仔
分享与交流:信息化建设、数字化转型、项目管理、流程梳理与再造、前后端开发、财务管理、数据库、网络、家庭教育与人生感悟等希望我的博客能带您愉快心情。
展开
-
【C#】.NET 8适配器模式实战:用C#实现高可用系统集成与接口桥接艺术
适配器模式是解决系统集成难题的黄金钥匙。通过结合现代技术栈:• 依赖注入实现组件解耦• Polly策略提升系统韧性• 异步支持优化吞吐性能• 自动化测试保障代码质量您将构建出可扩展、易维护、高可靠的企业级集成方案。下次面临接口不兼容问题时,请记住:适配器模式不是妥协方案,而是优雅设计的起点!原创 2025-04-13 08:50:30 · 713 阅读 · 0 评论 -
【C#】C#字符串拼接的6种方式及其性能分析对比
在C#编程中字符串拼接是一种常见且基础的操作,广泛应用于各种场景,如动态生成SQL查询、构建日志信息、格式化用户显示内容等。然而,不同的字符串拼接方式在性能和内存使用上可能存在显著差异。今天咱们一起来看看在C#中字符串拼接的常见6种方式及其使用BenchmarkDotNet进行性能分析对比。原创 2025-03-29 13:45:03 · 1032 阅读 · 0 评论 -
【C#】使用 Obfuscar 进行代码混淆
可以通过反编译程序集,直接就能看到你的源代码,这显然很不利于企业进行知识产权保护。Obfuscar、ConfuserEx、Dotfuscator、.NETReactor、Eazfuscator.NET、Xeoncode、Foxit等等,非常多。我们介绍开源的Obfuscar。这是一个非常老牌的混淆工具,从 2014 年就对外分发。而且此工具也在不断持续迭代更新,完全支持 dotnet 6 版本,对 WPF 和 WinForms 等等的支持也是非常好,支持多个不同混淆方式和等级的配置,支持混淆之后生成符号文件原创 2025-03-19 15:18:51 · 810 阅读 · 0 评论 -
[C#].NET最佳实践:减少使用异常业务逻辑判断
在 .NET 开发中,异常应作为处理意外错误的工具,而不是控制正常程序流程的手段。通过在代码中添加适当的逻辑检查,可以有效减少不必要的异常,提高应用性能和代码可维护性。在可能的情况下使用条件语句或 Try 方法替代异常。仅在处理异常情况下使用 try-catch,如无法预测的错误。使用诊断工具分析异常,优化性能瓶颈。原创 2025-02-14 09:28:27 · 431 阅读 · 0 评论 -
【C#】NET 9中LINQ的新特性-CountBy
在 .NET 中,使用 LINQ 对元素进行分组并计算它们的出现次数时,需要通过两个步步骤。首先,使用 GroupBy方法根据特定键对元素进行分类。然后,再计算每个组元素包含个数。而随着 .NET 9 版本发布,引入了一些新特性。其中 LINQ 引入了一种新的方法 CountBy,本文一起来了解 CountBy 方法。原创 2024-12-05 08:14:00 · 331 阅读 · 0 评论 -
【C#】C#中图片的Base64编码与解码转换详解
要将图片文件转换为Base64字符串,可以使用System.Drawing命名空间中的Image类(注意:在.NET Core和.NET 5+中,可能需要使用System.Drawing.Common包,并且它可能在某些平台上不可用,比如Linux,除非安装了相应的依赖项)。同样地,如果不想依赖System.Drawing,可以将字节数组写入文件,并使用适当的文件扩展名和关联的程序来打开它(例如,使用.jpg扩展名并用图片查看器打开)。注意:上面的代码使用了ImageFormat枚举来指定图片格式。原创 2024-12-04 08:43:35 · 1240 阅读 · 0 评论 -
[C#]C#实现数字到人民币大写金额的转换
在软件开发中,将数字转换成人民币大写形式的需求通常出现在需要生成财务报表、发票、收据、账单等正式文档的场景中。这些文档往往需要遵循一定的格式和规范,以确保信息的准确性和可读性,特别是在处理与金钱相关的数据时。请注意,这个示例主要是为了演示基本的转换逻辑,并未涵盖所有可能的边缘情况(比如超大数值的处理、负数的处理等)。可能需要根据实际需求进行调整和扩展。原创 2024-12-02 13:43:48 · 575 阅读 · 0 评论 -
【C#】使用.net9在C#中向现有对象动态添加属性
通过这些方法,我们可以向 C# 中的现有对象动态添加多个属性。尽管 C# 是一种强类型语言,但我们仍然可以通过这些技术实现动态功能,如反射和对象扩展。它实现了接口,这意味着您可以像使用字典一样动态添加属性。但是,我们可以通过使用一些技术和库来实现这一点,例如扩展方法、字典等。在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易,因为 C# 是一种强类型语言。虽然扩展方法不能直接添加属性,但它们可以扩展现有类型的功能。同样,我们可以通过组合字典来实现类似的效果。原创 2024-11-07 14:26:49 · 713 阅读 · 0 评论 -
【LINQ】C# 中 foreach 循环获取索引的巧妙方法
虽然使用 LINQ 和元组可以方便地获取索引,但这可能会对性能产生一定影响,因为它们需要额外的计算来生成索引。在性能敏感的应用中,应该谨慎使用这些方法。LINQ(Language Integrated Query)提供了强大的数据处理能力,我们可以利用它来简化获取索引的过程。循环中优雅地获取元素及其索引,而不需要手动管理索引变量。在实际开发中,你可以根据具体需求选择合适的方法来实现。如果你不想创建一个扩展方法,可以直接在 LINQ 查询中使用索引。幸运的是,我们可以通过一些简单的技巧来解决这个问题。转载 2024-09-18 08:31:56 · 357 阅读 · 0 评论 -
【VS】尚未配置为Web项目XXXX指定的本地IIS URL HTTP://localhost
其实也很简单,打开工程里面的csproj文件,找到UseIIS节点,和AutoAssignPort节点,将其改为False就好了。本来嘛,这也没啥,问题是当我们的电脑IP改变时,将会导致程序找不到原来的IP地址了,那么当然会报错啦。我们在Web项目的属性配置中勾选了“使用本地IIS Web服务器”;其实这不是权限不足造成的,而是网站的配置文件属性是“只读”造成的。IIS 网站添加默认文档时提示“由于权限不足而无法写入配置文件”在对网站添加默认文档时提示“由于权限不足而无法写入配置文件”。原创 2024-06-14 17:07:41 · 551 阅读 · 0 评论 -
[C#]在C#中对 JSON进行序列化和反序列化处理
使用 C# 🚀编程的 JSON 序列化和反序列化在 C# 编程的上下文中,执行 JSON 序列化和反序列化是在应用程序、Web Service 和数据库之间交换数据的常见任务。由掌握 C# 中的 JSON 序列化和反序列化,开发人员可以促进与 Web 服务、API 和数据库的无缝集成,从而简化跨不同平台和技术的数据传输和使用。在 C# 编程的上下文中,执行 JSON 序列化和反序列化是在应用程序、Web Service 和数据库之间交换数据的常见任务。使用 C# 🚀编程的 JSON 序列化和反序列化。转载 2024-05-09 11:09:38 · 499 阅读 · 0 评论 -
【C#】基于C#实现文本读取的7种方式
文本读取在上位机开发中经常会使用到,实现的方式也有很多种,今天跟大家分享一下C#实现读取读取的7种方式。以上7种方式主要是分别基于FileStream、File和StreamReader这三种来实现的,这三种方式的区别在于:FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率。StreamReader的特点是,它只能对文本文件进行读写操作,可以一行一行的写入和读取。原创 2024-02-04 13:53:14 · 1168 阅读 · 1 评论 -
【C#】自动更新
客户端程序更新,通常做法是做一个更新程序通过TCP/IP,HTTP,FTP协议指定路径,下载文件与本地文件进行比对。比对成功之后下载压缩包并解压替换本地程序。本文暂不比对版本,直接从FTP目录下载文件替换本地程序。lblMessage和progressBar。原创 2023-04-20 13:17:41 · 705 阅读 · 0 评论 -
【C#】获取C#当前程序所在目录的方法
/获取当前进程的完整路径,包含文件名(进程名)。结果:X:\xxx\xxx\xxx.exe(.exe文件所在的目录+.exe文件名)//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。结果:X:\xxx\xxx\xxx.exe(.exe文件所在的目录+.exe文件名)//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。结果:X:\xxx\xxx\xxx.exe(.exe文件所在的目录+.exe文件名)转载 2023-04-19 15:47:06 · 1503 阅读 · 0 评论 -
【C#】List.ForEach方法
在.net framework4 3.5 3.0 2.0这几个版本下,可以直接使用list.Remove(),但如果在使用Remove()后下一项是不会遍历到,会自动用下下项。所以,想删除list中的项,最好不用使用foreach和list.ForEach,而是使用for或list.RemoveAll。就是在id=2这项remove后还会对这项进行操作,但在进入下一项是id=4,而id=3这项没有遍历到。如果在遍历到某个特殊项的时候,不用遍历后面的项,需要break,这种情况使用foreach。原创 2023-03-31 08:57:29 · 9440 阅读 · 0 评论 -
【C#】如何给函数取一个好的名字
早在2013年,国外有个程序员做了一个有意思的投票统计(原始链接请见:《程序员:你认为最难做的事情是什么?一.常见的函数命名风格二.函数命名的最高境界三.函数命名最佳实践。转载 2023-02-28 13:47:50 · 506 阅读 · 0 评论 -
【C#】如何给变量取一个好的名字
讲一讲如何对变量命名。以下是本文的目录大纲:一. 变量命名风格二. 变量命名最高境界三. 变量命名最佳实践。原创 2023-02-28 13:36:16 · 1153 阅读 · 0 评论 -
[NetCore]ASP.NET Core 产生连续 Guid
1 前言1.1 这篇文章面向的读者本文不会过多解释 Guid 是什么,以及顺序 Guid 的作用,需要读者自行具备:知道 Guid,并且清楚其作用与优势清楚 Guid.NetGuid() 产生的 Guid 是混乱无序的,想要一种产生顺序 Guid 的算法来保证数据库的高效运行1.2 连续 Guid 的原理该 Guid 有16字节(byte)共128位(bit),可以包含时间戳,而顺序 Guid 主要是根据时间戳顺序来实现的,所以时间戳的部分,作为排序的决定性因素。转载 2022-11-26 08:15:22 · 1091 阅读 · 0 评论 -
[EF]关于EF使用Contains关键字的问题
此处复习一下 CHARINDEX(str1,str2),函数返回子字符串str1在字符串str2中的开始位置eg:求用户姓名为 "p1,p2,p3,p4,x2,y4"的所有用户信息,已知字符串 string str = “p1,p2,p3,p4,x2,y4”;错误做法:直接用字符串contains用户的userName!!!这种写法是不友好的,不但查询慢,而且还有一个空字符串的情况,而且当userName=p 或者=x 的时候,也会被搜索出来,这个是不对,所以不要用!转载 2022-11-17 08:20:36 · 2029 阅读 · 0 评论 -
[C#]C# 中 IsNullOrEmpty 和 IsNullOrWhiteSpace 你用对了吗?
C#中判断字段是否为空或者Null的时候,我们一般会使用到IsNullOrEmpty和IsNullOrWhiteSpace方法,这两个方法在大部分情况下判断的结果是一致的,但是有些情况下是不一致的。你是否必须将所有 String.IsNullOrEmpty 替换为 String.IsNullOrWhiteSpace?是的,除非你有特定的原因将表中最后的三个值视为有效字符。...转载 2022-08-29 09:35:08 · 3357 阅读 · 0 评论 -
【C#】判断字符串中是否包含指定字符或字符串(Contains/IndexOf)
【C#】判断字符串中是否包含指定字符或字符串(Contains/IndexOf)转载 2022-07-29 08:25:13 · 5843 阅读 · 0 评论 -
【C#】说说 C# 9 新特性的实际运用
说说 C# 9 新特性的实际运用转载 2022-07-28 08:08:06 · 776 阅读 · 0 评论 -
【 C# 】字符串的处理方法(比较/截取/分割/替换等)
这里写自定义目录标题1.字符串的比较 Equals()可以把字符串看作一个字符char类型的数组,首先一般作比较前,需要对大小写进行转换。strUp = str.ToUpper();//字符串转换为大写strLow = str.ToLower();//字符串转换为小写也可以忽略大小写进行比较。 string str1 = "帅的被人砍的Nick"; string str2 = "Nick帅的被人砍"; if( str1.Equals(str2,Strin转载 2022-03-03 15:19:14 · 2138 阅读 · 0 评论 -
[C#]C#中static、const、readonly与static readonly的区别与联系
1、const修饰符初始化时机:编译时,即编译程序时将值已经嵌入代码中;值状态:不允许动态修改修饰范围:字段、局部变量主要应用场景:主要应用于程序运行中不需要改变的变量的值,比如数学符号PI;2、static修饰符初始化时机:运行时,可以声明时赋值,也可以在构造函数,或使用时赋值值状态:允许修改修饰范围:类、字段、属性、方法、运算符、事件、构造函数(不能用于索引器、析构函数或类以外的类型)主要应用场景:主要作用于类的公共属性3、readonly修饰符初始化时机:运行时,可以声明时赋值或原创 2022-01-10 09:24:38 · 869 阅读 · 0 评论 -
[C#]几个超级实用但很少人知道的 VS 技巧
大家好,今天分享几个我知道的实用 VS 技巧,而这些技巧我发现很多人都不知道。因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS “骚”操作,他们会好奇地问:你是怎么做到的?这给我的感觉,有时候你知道一些别人不知道的小技巧便可以让你显得更专业。PS:本文所有示例演示均基于 VS 2019 版本。1. 扩展/缩小选区通过双击选中整个单词,这个操作大家应该都知道。但如何快速选择几个单词、或多个单词的字符串、或代码块呢?教大家一个快捷键,如何快速扩展选择代码区域。例如转载 2021-12-01 13:06:18 · 378 阅读 · 0 评论 -
[加密]C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespac转载 2013-09-24 08:28:58 · 3251 阅读 · 0 评论 -
[C#]C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)
\1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加;\2. 添加KeyPress / KeyDown事件:1、KeyPress 和KeyDown 、KeyPress之间的区别1)KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{原创 2021-07-30 15:37:00 · 15631 阅读 · 0 评论 -
C#索引器-索引器概述
<br />数组中的元素可以通过索引进行检索,如果一个类中有很多对象,怎样简单、快速地查找到需要的对象以及对象的特性呢?索引器就是为了实现这样的功能而设计的。索引器允许类或结构的实例按照与数组相同的方式进行索引。可以简单地把索引器理解为书中的目录,字典中提供的检索的索引。<br />索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。<br />索引器可以重转载 2010-11-22 16:01:00 · 1254 阅读 · 0 评论 -
C#索引器-索引器的定义
<br />索引器定义类似于属性,但其功能与属性并不相同。索引器提供一种特殊的方法编写get和set访问器。属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员。定义索引器的语法如下:<br /><访问修饰符> 类型名称 this [类型名称 参数名]<br />{<br /> get{//获得属性的代码} <br /> set{ //设置属性的代码}<br />}<br /转载 2010-11-22 16:01:00 · 1557 阅读 · 0 评论 -
默认构造函数的作用(“A”方法没有采用“0”个参数的重载。)
<br />构造函数主要用来初始化对象。它又分为静态(static)和实例(instance)构造函数两种类别。大家应该都了解如何来写类的构造函数,这里只说下默认构造函数的作用,以及在类中保留默认构造函数的重要性。实际上,我说错了。正确的说法是:以及在类中保留空参数构造函数的重要性。<br />我们来写一个类A,代码如下:<br />public class A<br />{<br /> public int Number; //数字<br /> public string Word;转载 2010-11-22 15:37:00 · 1986 阅读 · 0 评论 -
C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?
<br />using System;<br />public class ParentClass<br />{<br />public ParentClass()<br />{<br /> Console.WriteLine("父类构造函数。");<br />}<br />public void print()<br />{<br /> Console.WriteLine("I'm a Parent Class。");<br />}<br />}<br />public class Child转载 2010-11-22 15:37:00 · 2079 阅读 · 0 评论 -
C#接口-显式接口和隐式接口的实现
<br />C#中对于接口的实现方式有隐式接口和显式接口两种:<br />隐式地实现接口成员<br />创建一个接口,IChinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese<br />//隐藏式实现例子<br />public interface IChinese<br />{<br /> string Speak();<br />}<br />public class Speaker : IChinese<br />{<br /> public str转载 2010-11-22 16:00:00 · 1739 阅读 · 0 评论 -
C#方法参数传递-值传递
<br />c#常用的参数传递有两种方式:值传递和引用传递。<br />什么是值传递呢?就是把参数值放在方法中,在方法中对参数值做了修改,但是在方法调用之后,参数值还是原来的值。值传递好比把文件复制一份,通过网络传给别人,然后他可以在他的计算机上对文件做各种修改,修改会保存下来,但是你的计算机上的文件不会发生任何变化。<br />值传递参数(Value Parameter )<br />格式:方法名称(参数类型 参数名称[,参数类型 参数名称])<br />using System;<br />class转载 2010-11-22 15:05:00 · 1300 阅读 · 0 评论 -
C#索引器-索引器与数组属性的比较
<br />索引器(Indexer)<br />索引器允许类或结构的实例按照与数据相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。所以索引器也被称为有参属性。<br /><br />示例一:<br />using System ;<br />class ArrClass//没有索引器的类<br />{<br />private readonly string name;<br />public ArrClass(string name)<br />{<br />this.name =转载 2010-11-22 16:02:00 · 1496 阅读 · 0 评论 -
C#设置访问权限
<br />在C#中有一个规定:编译器不允许派生类的可访问性比其基类更高。也就是说,内部类可以继承于一个公共类,但公共类不能继承于一个内部类。<br />1、public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对于访问公共成员没有限制。<br />有关 public 与其他访问修饰符的比较,请参见可访问性级别。<br />示例<br />在下例中,声明了两个类:MyClass1 和 MyClass2。直接从 MyClass2 访问 MyClass1 的公共成员 x 和 y。<br转载 2010-11-22 15:39:00 · 1486 阅读 · 0 评论 -
C#中类的概念
<br />面向对象编程技术中最重要的概念就是类和对象,那么到底什么是类?在编程中应如何运用?<br /><br />类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。<br />简单地说,类是一种抽象的数据类型,是对一类对象的统一描述。在生活中,常常把一组具有相同特性的事物归为一类,当然根据分类的标准不同,划分的类也是不相同的。汽车和人都是独立的类,它们都有各自的特点。汽车这个大类还可以分为卡车,公共汽车,和小轿车等各种小类原创 2010-11-22 10:52:00 · 1237 阅读 · 0 评论 -
C#中类的声明
<br />类就是用class来声明的。class的语法如下:<br /><类的访问修饰符> class 类名<br />{<br />//类的主体<br />}<br />除class关键字和类名外,访问修饰符是可选项。下面以汽车为例声明一个类,代码如下:<br />public class Car<br />{<br />//汽车属性和方法<br />}<br />类命名要遵循的编码规则:<br />类命名应该采用帕斯卡命名法,即首字母大写。通常命名类采用完整的英文单词,如Book,Car,Teache原创 2010-11-22 10:53:00 · 1398 阅读 · 0 评论 -
C#继承中访问修饰符的区别
<br />继承中访问修饰符的区别<br />一、public 类内部可以,子类可以,其他类可以。<br />二、private 类内部可以,子类和其他类都不可以。<br />三、protected 类内部和子类可以,其他类不可以。<br />四、internal 类声明为内部的,即只有当前工程中的代码才能访问它。<br />父类中的成员如果用public修饰,任何类都可以访问;如果用private修饰,它将作为私有成员,只有类本身可以访问,其他任何类都无法访问。在C#中,使用protected修饰符的成员转载 2010-11-22 15:38:00 · 1081 阅读 · 0 评论 -
C#索引器-示例代码
<br />using System;<br />public class Photo //这个类是一个相片类<br />{<br />private string _title; //相片标题<br />//先定义默认构造函数<br />public Photo()<br />{<br /> //初始化相片标题的构造方法<br /> _title = "我是张三";<br />}<br />public Photo(string title)<br />{<br /> //初始化相片标题转载 2010-11-22 16:03:00 · 1377 阅读 · 0 评论 -
C#中base关键字-调用父类成员
<br />C#中base关键字在继承中起到非常重要的作用。它与this关键字相比,this关键字代表当前实例。base关键字代表父类,使用base关键字可以调用父类的构造函数、属性和方法。<br />使用base关键字调用父类构造函数的语法如下:<br />子类构造函数:base(参数列表)<br />使用base关键字调用父类方法的语法如下:<br />base.父类方法();<br />using System ;<br />class Teacher//老师类<br />{<br /> pub转载 2010-11-22 15:41:00 · 2938 阅读 · 2 评论