C#语言
文章平均质量分 64
jiuzaizuotian2014
这个作者很懒,什么都没留下…
展开
-
c#通过NPOI将集合数据输出到Excel
NPOI中输出数据的方式,直接上参考代码: IWorkbook workbook = new XSSFWorkbook();//对于xlsx格式,如果xls则不是这样的 ISheet sheet = workbook.CreateSheet(sheetName);//以下创建CellStyle ICreationHelper createHelper = workbook.GetCreationHelpe原创 2021-05-05 11:36:57 · 259 阅读 · 0 评论 -
.net中几种基本的对象间通信方式(直接调用、基本事件、delegate委托、EventBus)
对象间通信方式有多种,以下仅仅考虑最基本的几种方式:假设两个对象A和B需要通信,分三种情况考虑:(一)A和B互相持有对方的引用,此时通信最简单,都可以互相直接调用。(二)对象A直接持有对象B的引用,反过来B对象不持有A对象的引用(1)A对象可以直接使用B对象的方法和属性。(2)B对象不持有A对象的属性,则不能直接调用。此时对象B需要A配合完成某项工作,常常采用的方式:基本事件方式,委托持有,EventBus方式。 对于基本事件方式,即B中定义事件,A在获得B引用的时候就...原创 2021-05-05 09:43:50 · 662 阅读 · 0 评论 -
Net 5.0中MySql+EntityFrameworkCore的配置尝试
(一)使用Nuget添加依赖包添加如下三个包注意:本来使用MySql.Data.EntityFrameworkCore(具体是8.0.22版本),而不是Pomelo.EnityframeworkCore.MySql,但在执行下面第二步的时候出现了异常,异常关键信息如下:Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping..ctor(System.String, System.Typ原创 2021-01-01 21:33:04 · 6411 阅读 · 0 评论 -
C#之LINQ中常用的ToLookup,GroupBy, Join之用法总结
一、ToLookupLookup<TKey,TElement> 类 class Student { public string Name; public double Weight; public int Age; } class Program { static void Main(string[] args) { LookupExample(原创 2020-09-06 18:13:45 · 2819 阅读 · 0 评论 -
C#中常用的非泛型委托-AsyncCallback
委托AsyncCallback 即 delegate void System.AsyncCallback(System.IAsyncResult ar)其中IAsyncResult是表示异步操作状态的接口,由委托中的异步方法BeginInvoke返回得到,即IAsyncResult BeginInvoke(...)原创 2020-09-05 20:30:43 · 467 阅读 · 0 评论 -
C#中常用的几种预定义委托
在System命名空间中,定义了一些常用的委托,如Action,Func,Predicate,Comparison,Converter, EventHandler等。需要注意的是,参数带有in的,表示逆变;参数带有out的,表示协变。Action<in T> 或Action<in T1,...,in Tn> 即 delegate void System.Action<in T1,...,in Tn>(T1 arg1,...,Tn argn) //F...原创 2020-09-05 17:18:26 · 381 阅读 · 0 评论 -
C#中的任务并行库TPL
Paralle类的主要方法:(1)ParallelLoopResult For (int fromInclusive, int toExclusive, Action<int> body) 执行for循环,其中可能会并行运行迭代。 public static void Main() { ParallelLoopResult result = Parallel.For(0, 100, ctr => { Random rnd = new...原创 2020-09-04 18:45:34 · 556 阅读 · 0 评论 -
C#中的IO操作之File类
File 类提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建FileStream对象。主要方法:在这些方法中,会返回流对象或读取(写入)器对象的方法包括:(1)返回FileStream对象:Create(),Open(), OpenRead(),OpenWrite()(2)返回StreamWriter对象 AppendText(),CreateText()(3)返回StreamReader对象 OpenText()...原创 2020-09-04 12:04:10 · 515 阅读 · 0 评论 -
C#流操作之五:二进制读取器BinaryReader
BinaryReader 类用特定的编码将基元数据类型读作二进制值。原创 2020-09-04 11:05:16 · 3433 阅读 · 0 评论 -
C#流操作之四:二进制写入器BinaryWriter
BinaryWriter 类将二进制中的基元类型写入流并支持用特定的编码写入字符串。此类型实现IDisposable接口。在使用完类型后,您应直接或间接释放类型。若要直接释放类型,请在try/catch块中调用其Dispose方法。若要间接释放类型,请使用using(在 C# 中)或Using(在 Visual Basic 中)等语言构造。...原创 2020-09-04 10:59:56 · 1230 阅读 · 0 评论 -
C#流操作之三:字符读取器TextReader
一、TextReader基类TextReader抽象类表示可读取有序字符系列的读取器。官方文档部分描述如下: string filename = @"C:\Example\existingfile.txt"; char[] result; StringBuilder builder = new StringBuilder(); using (StreamReader reader = File.OpenTe原创 2020-09-04 10:49:25 · 2467 阅读 · 1 评论 -
c#中流操作之二:字符写入器TextWriter
除了Stream抽象类及其派生的实现类(如FileStream,MemoryStream,NetworkStream...),为了简化流的操作,.net类库中还定义了TextReader和TextWriter抽象类,分别表示读取器和写入器。(一)写入器的基类TextWriter抽象类的官方定义如下:(二)TextWriter的实现类之StreamWriter继承Object->MarshalByRefObject->TextWriter->St...原创 2020-09-04 10:29:10 · 2189 阅读 · 0 评论 -
c#中流操作之一:Stream对象
(一)流的概述流代表源与目标之间传输的一定的数据量。无论是文件、网络还是打印机等设备,流都要提供一种通用的方式与数据进行交互。流不仅可以访问文件,还可以访问网络、内存地址等。可以看到,FileStream和MemoryStream都是直接继承于Stream抽象类。流继承于 System.IO.Stream抽象类,Stream的常用成员包括:CanRead/CanWrite/CanSeekClose()Flush()FlushAsync()LengthPositionCop原创 2020-09-04 10:00:29 · 1703 阅读 · 0 评论 -
c#获取当前工作路径(VSTO)
System.IO.Directory.CurrentDirectory 可以获取到Exe可执行程序的安装路径,但获取不了VSTO插件文件安装路径AppDomain.CurrentDomain.BaseDirectory 可以获取到VSTO文件安装的路径原创 2020-07-27 12:32:49 · 1358 阅读 · 0 评论 -
常用符号的Unicode
序号 具体符号 Unicode1 ㎡ \u33A12 × \u00D73 ≥ \u22654 ≤ \u22645 ∽...原创 2020-06-30 19:13:04 · 1778 阅读 · 0 评论 -
c#中利用keybd_event函数+自定义软键盘实现中文输入时的问题
(一)声明外部方法 [DllImport("User32.dll")] public static extern void keybd_event(byte bVK, byte bScan, Int32 dwFlags, int dwExtraInfo);(二)首先通过切换输入法来说实现中文输入。即键盘CTRL+空格键切换输入法。 //切换输...原创 2019-08-19 18:38:15 · 3471 阅读 · 0 评论 -
WPF组件中当设置IsManipulationEnabled="True"时导致TouchUp、触摸Click不能被触发的解决方法
WPF元素当设置IsManipulationEnabled=true的时候,TouchMove和TouchUp事件都会优先去触发产生Manipulation事件,而不会被元素中的TouchMove、TouchUp关联的事件处理程序所捕获。Touch事件与Manipulation 关系如下:如上面这段话所说,当第一个Touch Device 产生TouchDown事件且e.Ha...原创 2019-04-28 20:55:16 · 3876 阅读 · 0 评论 -
c#单元测试过程中的非public方法的测试
对于c#代码的测试过程中,如果需要对非Public方法进行测试,则可以采用以下四种手段中的一种。其中第一种和第二种都不建议采用,第三方方法比较繁琐也很少使用,第四种方法比较简单易用并推荐使用。(1)修改private方法为public方法,测试完毕后再修改回private。可以测试,但破坏源代码,不建议使用。(2)采用InternalVisibleTo属性,把被测试方法的可见性修改改为in...原创 2019-03-12 14:02:37 · 833 阅读 · 0 评论 -
c#从相机拍摄的照片中提取拍摄时间
数码相机拍摄的照片通常会存储一些元数据,目前主要采用Exif标准,Exif标准是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。c#从相机拍摄的照片中提取拍摄时间,会用到PropertyItem类,该类的ID属性代表数据项ID,表示到底该项指的时什么数据,比如拍摄时间、分辨率、宽度、高度、相机类型等等。该类的Value属性代表具体属性数值,为字节数组类...原创 2018-08-07 20:05:42 · 6020 阅读 · 2 评论 -
c#中记录一段代码耗时的方法
c#中记录一段代码耗时的三种方法,转载自https://www.cnblogs.com/zk-zhou/p/6351819.html转载 2018-07-29 18:56:57 · 1241 阅读 · 0 评论 -
C#中Bitmap类型内存占用的一些测试与分析
c#中的Bitmap类型是很重要的类型,常常感到困惑,自己本次做了一些查询与测试,总结如下:一、主要情况说明(一)Bitmap类该类是CLR管理的类型,但其图像数据存储空间是否收到CLR管理不是很清楚。不过在使用的时候,是无需手工调用Dispose来释放数据内存空间的,GC会自动释放内存控件的。当然手工调用Dispose的话,GC确实会释放其数据内存空间的,只不过内存空间是托管的还是非...原创 2018-07-31 14:26:28 · 8029 阅读 · 1 评论 -
C#中类静态成员的继承(注:static知识是wpf依赖项属性的基础,wpf开发者必须得掌握)
c#中静态的字段或方法,是可以被子类继承的。但是,存在如下问题需要注意:(1)子类继承的字段,并不属于子类,仍然属于父类。(2)在子类中修改了父类的静态字段,则父类的静态字段就确实被改了。(3)在子类中可以用同名的静态字段覆盖父类的静态字段,但是不能使用virtual和override关键字。不过,vs中在子类中会给出警告提示,但确实可以正确运行。(4)在子类的实例方法中可以直...原创 2018-08-16 18:55:40 · 3744 阅读 · 0 评论 -
async/await使用的要点
async/await的使用:(1)如果一个方法标注了async,则其返回值只能是 void,Task,Task<T>三者之一(2)如果异步方法中没有await,那么这个方法将会以同步方式执行(3)单个async方法中可以拥有多个await(4)当遇到await表达式时,调用线程将会挂起,知道await方法完成。这里的挂起和阻塞是不同的,如以下代码,在Button_cl...原创 2018-07-21 19:17:21 · 802 阅读 · 0 评论 -
C#中的对象资源释放
c# 自身对于所有托管对象(managed object)都是可以不用程序员去干预的(注:可以不用干预,当然资源耗费很多且必要时也可以去做一些干预来提升程序性能,比如通过代码部分控制垃圾回收),但对于非托管资源(文件、流、数据库连接、GDI+对象、COM对象等等)都需要程序来控制资源的释放。释放资源主要有两种方式,其一是对象实现IDisposable接口,由程序员调用IDisposable.D...原创 2018-07-20 12:26:33 · 17563 阅读 · 0 评论 -
c#的序列化和反序列化
(一)使用总体说明.net framework的类库中提供了三个可以用于序列化和反序列化的类,分别为BinaryFormatter、SoapFormatter和XmlSerializer。BinaryFormatter的命名空间为System.Runtime.Serialization.Formatters.Binary,位于程序集mscorlib.dll中。SoapFormatter...原创 2018-07-09 17:32:39 · 22215 阅读 · 0 评论 -
c#语言的MemberwiseClone使用需要注意(不会为字段新new对象,不会调用构造函数)
C#语言种的MemberwiseClone方法仅仅是再内存种创建一个新对象,然后将原有对象的所有字段直接复制过去,无论是值类型还是引用类型,是值类型的就复制值类型,是应用类型的就复制引用本身(而不会复制所引用的对象),因此,是浅拷贝。需要注意的是: 在利用MemberwiseClone()创建新对象的时候,不会像利用new的时候一样,也就是不会先执行字段的创建和构造方法条用的过程。例如:...原创 2018-05-29 10:21:48 · 818 阅读 · 0 评论 -
c#枚举类型的初始值
C#枚举类型的默认值为0,如果在使用过程中没有给枚举类型的变量赋值,则系统会自动默认赋值为0,而不是null,非常需要注意。最好在定义枚举类型变量的时候赋初值,否则不小心就容易出错。本来还以为是定义的枚举类型中的第一个值,但不一定如此,只有第一个值定义为0值的时候才是,其它都不是。无论自己定义的枚举类型是否包含定义了0值,枚举类型的默认值都是0。这个结论与在enum类型定义时是否定义了0值...原创 2018-05-24 09:35:44 · 12230 阅读 · 0 评论 -
c#调用C/C++代码时出现的PInvokeStackImbalance异常实例及解决方式
c#中调用c/C++的dll时,需要加上CallingConvention特性参数,否则容易出现PInvokeStackImbalance异常。例如,以下问题描述及解决 方式。(一)问题描述在利用C#调用本地dll库时,原先在c/c++中的函数原型如下:extern "C" __declspec(dllexport) int playSpecificSound(wchar_t* fil...原创 2017-10-05 16:35:53 · 1213 阅读 · 0 评论 -
C#调用本地动态链接库时,根据x86或x64自动选择相应的动态链接库dll文件
利用c#开发的程序在调用dll文件时,可以根据系统类型选择正确的dll动态链接库。如下所示,可以创建两个DLLImport外部函数(分别对应32位版本和64位版本),然后创建一个包装方法,在包装方法中根据系统类型选择正确版本的方法。 //32bit [DllImport("ASR\\ASR32.dll",EntryPoint = "startRec")]...原创 2017-10-19 19:06:33 · 4670 阅读 · 0 评论 -
在外部程序集中访问internal方法之InternalsVisibleTo
c#.net 中的类方法前加上internal,表示仅仅是本程序集中的对象可以访问,而其他程序集中的对象不能访问。在单元测试过程中,有时需要对加上internal的方法进行测试,为了能在测试程序集中访问,可以在被测试程序集中添加InternalsVisibleTo来实现。在被测试程序集中,可以找到AssemblyInfo.cs文件(vs中在解决方案资源管理器的Properties节点下),...原创 2017-09-20 21:34:44 · 6033 阅读 · 0 评论 -
c#之IComparable<T>接口、IComparer<T>接口及Comparison<T>委托应用于集合排序
C#中的集合类常常需要排序,集合类的Sort方法是常用方法。比如 List<T> list=...,需要对list进行排序,可以用list.Sort()方法。该方法有多个重载。(1)使用IComparer<T>接口可以为Sort传入IComparer<T>的实现类的实例对象,该接口为:public interface IComparer&...原创 2018-09-05 16:18:37 · 4857 阅读 · 0 评论 -
Pen.Freeze()方法能够有效提升WPF中DrawingVisual的绘图性能
在利用DrawingVisual尽心绘图时,如果对Pen对象调用Freeze()方法,冻结对对象的修改,则可以大幅度提升绘图性能(经过实测,对2800个线段绘制,性能提升20~50倍左右)。Freeze()方法继承自Freezable对象,调用该方法后,该对象将不可以修改。Freeze() 使当前对象不可修改,并且将其 IsFrozen 属性设置为 true。 (Inher...原创 2019-02-18 20:00:43 · 1610 阅读 · 0 评论 -
通过WebBrowser显示Word文档的方法
通过以下代码可以实现利用WebBrowser来显示word文档 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void webBrowser1_DocumentCom...原创 2019-03-16 15:28:41 · 4650 阅读 · 1 评论 -
c#中const与readonly区别
const表示常量,定义的时候就要初始化;readonly表示只读,定义的时候可以不初始化,可以延迟到构造方法中进行初始化。以下转载的两篇文章写的很好。 转载 追梦赤子心 的文章:C#基础知识七之const和readonly关键字得到的结论:const修饰的常量在声明时必须初始化值;readonly修饰的常量可以不初始化值,且可以延迟到构造函数。 cons修饰的常量在编译期间...转载 2018-08-16 21:06:30 · 864 阅读 · 0 评论