202010-10 通过实例解析c# yield关键字使用方法 1.yield实现的功能yieldreturn:先看下面的代码,通过yieldreturn实现了类似用foreach遍历数组的功能,说明yieldreturn也是用来实现迭代器的功能的。usingstaticSystem.Console;usingSystem.Collections.Generic;classProgram{//一个返回类型为IEnumerable<int>,其中包含三个yieldreturnpublicstaticIEnumerable<int>enumerableFuc(){yieldreturn1;yieldreturn2;yieldreturn3;}staticvoi... 继续阅读 >
202010-10 区分C# 中的 Struct 和 Class 翻译自ManjulataYadav2019年6月2日的博文《DifferenceBetweenStructAndClassInC#》,补充了一些内容和示例。结构体(struct)是类(class)的轻量级版本。结构体是值类型,可用于创建行为类似于内置类型的对象。比较结构体和类共享许多特性,但与类相比有以下局限性。结构体不能有默认构造函数(无参构造函数)或析构函数,构造函数中必须给所有字段赋值。publicstructCoords{publicdoublex;publicdoubley... 继续阅读 >
202010-10 C# 读取ttf字体文件里的Unicode实现 因为爬虫要解析򈃌这种字体编码的值,下载到一个ttf文件,用百度字体编辑器打开,可以看到每个字符对应的Unicode(数字下方$23、$2A...这些),我需要拿到这些映射关系,才能解析对应数字。所以我百度搜索C#读取ttf文件的unicode但是没有找到答案。直到用google搜索“C#readttfunicode”,找到了一个能解决我的问题的回答。https://stackoverflow.com/questions/1439551/get-supported-characters-of-a-font-in-c-shar... 继续阅读 >
202010-10 C# 利用Selenium实现浏览器自动化操作的示例代码 概述Selenium是一款免费的分布式的自动化测试工具,支持多种开发语言,无论是C、java、ruby、python、或是C#,你都可以通过selenium完成自动化测试。本文以一个简单的小例子,简述C#利用Selenium进行浏览器的模拟操作,仅供学习分享使用,如有不足之处,还请指正。涉及知识点要实现本例的功能,除了要掌握Html,JavaScript,CSS等基础知识,还涉及以下知识点:log4net:主要用于日志的记录和存储,本例采用log4net进行日志记... 继续阅读 >
202010-10 详解C#压缩、解压文件夹/文件(带密码) 前言今天梳理一下项目中用到的压缩、解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件。今天就好好整理记录下,别下次遇到需求又重头开始了。DotNetZipDotNetZip是一个开源的免费类库,主要提供了快速操作zip文件的工具集,VB、C#任何.Net语言都可以通过它创建、解压缩zip文件。我使用该类库最主要的目的还是因为它可以创建带密码保护的压缩文件。只有设置了zip.Password="password"之后,被压缩的文件才会有... 继续阅读 >
202010-10 谈谈c#中的索引器 概念索引器(Indexer)允许类中的对象可以像数组那样方便、直观的被引用。当为类定义一个索引器时,该类的行为就会像一个虚拟数组(virtualarray)一样。索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。可以使用数组访问运算符([])来访问该类的实例。索引器的行为的声明在某种程度上类似于属性(property)。属性可使用get和set访问器来定义索引器。但是属性返回或设置的是一个特定的数据成员,... 继续阅读 >
202010-10 C# 实现dataGridView选中一行右键出现菜单的示例代码 在窗体中添加DataGridView控件和ConTextMenuStrip1控件,修改DataGridView属性,将contextMenuStrip控件绑定dataGridView控件this.dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;//选中整行可在属性中修改datagridview.AutoGenerateColumns=false;//不让datagridview自动生成列,可在属性中修改datagridview.AllowUserToAddRows=true;//禁止自动生成行可在属性中修改代码实现选中一行,右键出现菜... 继续阅读 >
202010-10 C# 如何解析获取Url参数值 今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串。样例如下:https://shequ.jb51.net/?url=www.jb51.net/?id=15&data={"id":12,"name":"今天天气不错"}现在的问题就是,我需要将url参数中的data值的json中的id修改为url参数中id的值,然后再拼接成完整的url去获取数据。简单来说就是将url进行如下改变,现在问... 继续阅读 >
202010-10 C# DataTable常见用法汇总 C#DataTable的常见用法:(1)新建数据表。DataTabledt=newDataTable();如果带个String参数,此参数表示表名。(2)向表添加列。//数据库的Nvarchar等类型,在此可用String兼容。可不指明数据类型DataColumndc=newDataColumn("商品编号",typeof(system.string));dt.Columns.Add(dc);(3)设置表特定行与列的数据值。dt.Rows[i].SetField<int>(dc,int.Parse(hc.Values[i]);(4)将某行数据加入到表。dt.Rows.Add(dr.ItemA... 继续阅读 >
202010-10 全面分析c# LINQ 大家好,这是[C#.NET拾遗补漏]系列的第08篇文章,今天讲C#强大的LINQ查询。LINQ是我最喜欢的C#语言特性之一。LINQ是LanguageINtegratedQuery单词的首字母缩写,翻译过来是语言集成查询。它为查询跨各种数据源和格式的数据提供了一致的模型,所以叫集成查询。由于这种查询并没有制造新的语言而只是在现有的语言基础上来实现,所以叫语言集成查询。一些基础在C#中,从功能上LINQ可分为两类:LINQtoObject和... 继续阅读 >
202010-10 如何使用C# 捕获进程输出 Intro很多时候我们可能会需要执行一段命令获取一个输出,遇到的比较典型的就是之前我们需要用FFMpeg实现视频的编码压缩水印等一系列操作,当时使用的是FFMpegCore这个类库,这个类库的实现原理是启动另外一个进程,启动ffmpeg并传递相应的处理参数,并根据进程输出获取处理进度为了方便使用,实现了两个帮助类来方便的获取进程的输出,分别是ProcessExecutor和CommandRunner,前者更为灵活,可以通过事件添加自己的额外事... 继续阅读 >
202010-10 C#中接口(Interface)的深入详解 定义在C#语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的。一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承。无论是表示类之间的继承还是类实现接口、接口之间的继承,都使用“:”来表示。接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。接口定义了语法合同"是什... 继续阅读 >
202010-10 浅析c# 线程同步 同步是一种只允许一个线程在特定时间访问某些资源的技术。没有其他线程可以中断,直到所分配的线程或当前访问线程访问数据完成其任务。在多线程程序中,允许线程访问任何资源所需的执行时间。线程共享资源并异步执行。访问共享资源(数据)是有时可能会暂停系统的关键任务。所以可以通过线程同步来处理它。主要场景如:存款,取款等交易业务处理。线程同步的优点一致性维护无线程干扰C#锁定使用C#lock关键字同步执行程序。它... 继续阅读 >
202010-10 c# 自定义值类型一定不要忘了重写Equals,否则性能和空间双双堪忧 一:背景1.讲故事曾今在项目中发现有同事自定义结构体的时候,居然没有重写Equals方法,比如下面这段代码:staticvoidMain(string[]args){varlist=Enumerable.Range(0,1000).Select(m=>newPoint(m,m)).ToList();varitem=list.FirstOrDefault(m=>m.Equals(newPoint(int.MaxValue,int.MaxValue)));Console.ReadLine();}publicstructPoint{publicintx;publicinty;public... 继续阅读 >
202010-10 C# 9 中新加入的关键词 init,record,with 一:背景1.讲故事.NET5终于在2020-08-25也就是大前天发布了第八个预览版,这么多的预览版搞得我都麻木了,接踵而来的就是更多的新特性加入到了C#9中,既然还想呆在这条船上,得继续硬着头皮学习哈,这一篇跟大家聊聊新增的几个关键词。二:新增关键词1.init出来一个新语法糖,首先要做的就是去揭它的老底,这样可以方便推测它的应用场景,为了方便表述,我先上一个例子:publicclassPerson{publicstringName{get... 继续阅读 >
202010-09 浅析C# 结构体struct 结构体有时候我们仅需要一个小的数据结构,类提供的功能多于我们需要的功能;考虑到性能原因,最好使用结构体。结构体是值类型,存储在栈中或存储为内联(如果结构体是存储在堆中的另一个对象的一部分)。例如类class:publicclassDimensions{publicDimensions(doublelength,doublewidth){Length=length;Width=width;}publicdoubleLength{get;set;}publicdoubleWidth{get;set;}}可以使用结... 继续阅读 >