202101-24 详解如何在C#中使用投影(Projection) 投影(Projection)是一种可以将查询结果进行塑性的一种操作,你可以使用投影将一个object转成仅包含你需要属性的新对象,这篇文章中,我们就一起看看如何使用投影功能。C#中的投影LINQ集成查询中有两个支持投影的扩展方法,分别为:Select和SelectMany操作,可以用它们投影单个或者多个属性,或者投影查询的结果集到一个新的匿名类型中,还可以在投影的过程中执行:再计算,过滤,或者其他一些必要的操作。Select投... 继续阅读 >
202101-22 如何使用C#中的Lazy的使用方法 延迟初始化是一种将对象的创建延迟到第一次需要用时的技术,换句话说,对象的初始化是发生在真正需要的时候才执行,值得注意的是,术语延迟初始化和延迟实例化的意思是相同的——可以互换使用,通过使用延迟初始化技术,可以避免应用程序不必要的计算和内存消耗,这篇文章我们将会讨论如何在C#中使用延迟初始化。有些朋友听完这些可能会懵逼,接下来用一个简单的例子来了解下延迟加载的场景,考虑下面两个类,Custome... 继续阅读 >
202101-21 C# StreamReader类实现读取文件的方法 在C#语言中StreamReader类用于从流中读取字符串。它继承自TextReader类。StreamReader类的构造方法有很多,这里介绍一些常用的构造方法,如下表所示。构造方法说明StreamReader(Streamstream)为指定的流创建StreamReader类的实例StreamReader(stringpath)为指定路径的文件创建StreamReader类的实例StreamReader(Streamstream,Encodingen... 继续阅读 >
202101-21 C# Invoke,begininvoke的用法详解 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。 首先说下,invoke和begininvoke的使用有两种情况: 1.control中的invoke、begininvoke。 2.delegrate中的invoke、begininvoke。 这两种情况是不同的,我们这里要讲的是第1种。下面我们在来说下.NET中对invoke和begininvoke的官方定义。 control.invoke(参数delegate)方... 继续阅读 >
202101-21 C# 如何合并和拆分PDF文件 一、合并和拆分PDF文件的方式 PDF文件使用了工业标准的压缩算法,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页“,可以单独处理各页,特别适合多处理器系统的工作。PDF文件结构主要可以分为四个部分:首部、文件体、交叉引用表、尾部。PDF操作类库非常多,如下图所示,常用的类库有:Spire.Pdf、iTextSharp。二、使用Spire.Pdf合并和拆分PDF文件 使用Nuget添加Spire... 继续阅读 >
202101-21 C#使用struct直接转换下位机数据的示例代码 编写上位机与下位机通信的时候,涉及到协议的转换,比较多会使用到二进制。传统的方法,是将数据整体获取到byte数组中,然后逐字节对数据进行解析。这样操作工作量比较大,对于较长数据段更容易计算位置出错。其实,对于下位机给出通讯的数据结构的情况下,可以直接使用C#的struct将数据直接转换。需要使用到Marshal。数据结构假定下位机(C语言编写)给到我们的数据结构是这个,传输方式为小端方式typedefstruct{unsignedlong... 继续阅读 >
202101-21 聊聊C# 中HashTable与Dictionary的区别说明 1.哈希表(HashTable)简述在.NETFramework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.2.什么情况下使用哈希表(1)某些数据会被高频率查询(2)数据量大(3)查询字段包含字符串类型(4)数据类型... 继续阅读 >
202101-21 C# 通过反射获取类型的字段值及给字段赋值的操作 举例:存在一个类:PublicClassStudent{publicstringname;publicintage;}Studentstu1=newStudent();现在,我们想通过反射在运行时给stu1的name和age字段赋值,让name=“小明”,age=15,怎么做?简单的代码如下:...略usingSystem.Reflection;//反射类...略staticvoidMain(string[]args){Typet=stu1.GetType();FieldInfofiledInfo1=t.GetField(”name");FieldInfofiledInfo2=t.GetField(”age... 继续阅读 >
202101-21 C# 中属性PropertyInfo的setvalue用法说明 下面是关于setvalue方法的介绍以及错误简介用索引化属性的可选索引值设置指定对象的该属性值。C#publicvirtualvoidSetValue(objectobj,objectvalue,object[]index);参数objObject将设置其属性值的对象。valueObject新的属性值。indexObject[]索引化属性的可选索引值。对于非索引化属性,该值应为null。实现SetValue(Object,Object,Object[])异常ArgumentExceptionindex数组不包含所需的参数类型。或找不到该属性... 继续阅读 >
202101-21 C# 添加对System.Configuration.dll文件的引用操作 却被编译器提示说:警告1“System.Configuration.ConfigurationSettings.AppSettings”已过时:“Thismethodisobsolete,ithasbeenreplacedbySystem.Configuration!System.Configuration.ConfigurationManager.AppSettings”于是转而想找到那个ConfigurationManager类来使用,结果在System.Configuration命名空间下死活找不到ConfigurationManager类,无奈,求助于网络,才知道原来还要添加对System.Configuration.dll文... 继续阅读 >
202101-21 C# 遍历datatable字段名和value的案例 遍历datatable的方法:DataTabledt=dataSet.Tables[0];foreach(DataColumncolindt.Columns){stringname=col.ColumnName;//获取到DataColumn列对象的列名dt.columns[行数][col.ColumnName].tostring()}foreach(System.Data.DataColumnkindataTable.Columns){columnName=k.ColumnName;columnType=k.DataType.ToString();}补充:C#提取DataTable指定字段到新的DataTable方法我就废... 继续阅读 >
202101-21 C# DataTable数据遍历优化详解 我们在进行开发时,会经常使用DataTable来存储和操作数据,我发现在遍历DataTable并对数据进行删除和添加操作时速度非常慢,查阅相关资料并测试在添加主键后可以使遍历和操作速度提高很多:测试代码,测试的是我们向取出来数据满足Flag!=1条件的所有数据的后面添加一条数据(因为这条数据的一些字段值是根据前面的几条满足条件[“AccID='”+accID+“'ANDY='”+year+“'ANDAbsID<=”+absID;]数据的值累加得到的)所... 继续阅读 >
202101-21 C# 控制台实现一次性输入多行的操作 推荐使用第二种方法。1、使用StringBuilder存储:按下q键时退出StringBuildersb=newStringBuilder();while(true){stringinput=Console.ReadLine();if(input.Equals("q")==false)//如果输入的不是q(区分大小写),则增加记录sb.AppendLine(input);elsebreak;//如果该行仅仅输入q,则结束输入}Console.WriteLine("按输入方式输出(不会有最后的退出符号q,而是一个空行):");Console.WriteLine(sb.ToString());... 继续阅读 >
202101-21 C# Datatable的几种用法小结 在C#中,从数据库中读取出来的数据一般都会存储在datatable中。datatable其实也是一张表,就像是从数据库中将检索出来的结果copy到datatable中一样。datatable的内部数据结构就是这样的一个二维表。下面介绍一下datatable中的几种用法。添加引用//引用命名空间usingSystem.Data;创建表//创建一个空表DataTabledt=newDataTable();//创建一个名为"new-tabel"的空表;DataTabledt=newDataTable("new-tabel");创建列//1.创建... 继续阅读 >
202101-21 C# dataset存放多张表的实例 在C#中用同一个dataset保存从数据库中取出的多张表:cmd.CommandText="select*fromtable1;";NpgsqlDataAdapterda=newNpgsqlDataAdapter(cmd);//实例化一个类,它用于连接C#与数据库,并执行cmd语句且将结果缓存到适配器中DataSetthedataset=newDataSet();//实例化一个dataset,实例名为thedataset(通常被定义为ds)da.Fill(thedataset,"thetable1");//将适配器中的内容填充到dataset的thetable1表中,thetable1... 继续阅读 >
202101-17 使用C#9中records作为强类型ID的实例教程 强类型ID实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体的ID的类型是一样的,比如都是整数的ID,这有可能会出现ID值传错的问题,看下边的示例。publicvoidAddProductToOrder(intorderId,intproductId,intcount){...}...//这个地方,参数传错了AddProductToOrder(productId,orderId,intcount);上面的代码可以很好地通过检查并编译,但是在运行的时候就出问题了,这是逻辑bug。幸运的... 继续阅读 >