IEnumerable 中的 Count、Sum、Select、SelectMany、Where 是什么意思?

IEnumerable的Count、SumCount参数是条件,Sum参数是需要合计的属性。Count表示符合条件的有多少个,Sum表示这个属性的值加起来是多少。publicclassData{publicintId{get;set;}publicintCount{get;set;}publicData(intid,intcount){Id=id;Count=count;}}List<Data>datas=newList<Data>();datas.Add(newData(1,1));datas.Add(newData(2,4));datas.Add(newData(3,7));Response.Write(datas.Count(m=>m.Id>=2));//2Response.Write(datas.Sum(m=>m.Count));//12答案见代码中的注释。IEnumerable的Select、SelectManySelect参数常常容易误解,到底是跟条件还是跟投射呢?其实都可以,但是:跟条件也并不表示选择符合条件的,而是计算条件以返回...

.NET WebBrowser-自动点击网页中的按钮

.NETWebBrowser-制作表单系统.NETWebBrowser-一点心得.NETWebBrowser-访问网页失败.NETWebBrowser-DocumentCompleted说明.NETWebBrowser-屏蔽JavaScript错误信息.NETWebBrowser-自动点击网页中的按钮.NETWebBrowser-注入JavaScriptHtmlElementbtn=webBrowser1.Document.GetElementById("btn");btn.InvokeMember("click"); .NETWebBrowser-制作表单系统.NETWebBrowser-一点心得.NETWebBrowser-访问网页失败.NETWebBrowser-DocumentCompleted说明.NETWebBrowser-屏蔽JavaScript错误信息.NETWebBrowser-自动点击网页中的按钮.NETWebBrowser-注入JavaScript...

判断 Dictionary 中的 key 是否存在

如果key是对象,则要注意,因为对象是按地址匹配的:Cc1=newC();c1.Name="a";Cc2=newC();c2.Name="a";Dictionary<C,string>dic=newDictionary<C,string>();dic.Add(c1,"A");Response.Write(dic[c1]);//给定关键字不在字典中。如果key是结构,则是按值匹配的:Dictionary<KeyValuePair<int,int>,string>dic=newDictionary<KeyValuePair<int,int>,string>();dic.Add(newKeyValuePair<int,int>(1,2),"a");Response.Write(dic[newKeyValuePair<int,int>(1,2)]);//显示a ...

抛弃传统,用委托、Lambda、Linq 取 List 中的

假如我们有一个列表publicclassCounty{publicintCountyId{get;set;}publicstringCountName{get;set;}}List<County>counties=newList<County>();counties.Add(newCounty(){CountyId=1,CountName="北京"});counties.Add(newCounty(){CountyId=2,CountName="上海"});counties.Add(newCounty(){CountyId=3,CountName="广州"});要查找CountyId==2对应的County,方法有很多。一、最传统方法:for(inti=0;i<counties.Count;i++){if(counties[i].CountyId==2){county=counties[i];break;}}二、稍微简单点的方法:foreach(varitemincounties){if(item.CountyId==2){county=item;brea...

SQL Server timestamp 如何转换成 C# 中的 string

SQLServer 中的timestamp 是自动值,只要是这个类型,在添加、修改记录时,这个值就会自动添加、更新,可用来确定这条记录有没有变更过。timestamp 在C# 中对应的是byte[] 类型,要转换成string的话,可用下面的方法:"0x"+BitConverter.ToString((byte[])dataView1[index]["RecordVersion"]).Replace("-","");...

用 LINQ 快速把一个列表类中的 id 取出来

需求有一个类C,有两个属性Id、Name。有一个List<C>list,希望把这个list中所有C对象的Id取出来,并串成用逗号隔开的字符串。解决方法技术大家都懂,非常简单,但如果用LINQ则会节省大量代码。varobj=fromcinlistselectc.Id.ToString();stringstr=String.Join(",",obj.ToArray<string>());使用frominselect,需引用System.Linq命名空间。更多高级应用,请参见LINQtoSQL学习笔记。...

Visual Studio 调试时如何将 try 中的异常显示出来?

众所周知,try中的异常由catch代码来处理,但如果在调试阶段,可能觉得catch还不够细,需要VisualStudio截获并抛出异常,这样还方便些。解决办法菜单->调试->异常,将“引发”勾上。...

继承在泛型中的应用

publicinterfaceI{intId{get;set;}}publicclassC:I{publicintId{get;set;}}List<C>cs=newList<C>();cs.Add(newC(){Id=111});cs.Add(newC(){Id=222});//List<I>iss=cs;//错误List<I>iss=cs.ConvertAll<I>(newConverter<C,I>(m=>(I)m));如上,List<>不以像多态一样直接赋值,它必须先经过转换。要注意的是,现在是两个列表了,iss中的删除一项,不影响cs的Count(),但他们原有项还是指向的是一个类,也就是说在这边改了,另一边也会变。...
代码星球 代码星球·2023-04-16

为什么无法修改类中的 struct 的属性?

如果有一个类叫Car,其中有一个属性Rectangle(是个结构),那么以下是错误的,将得到“无法修改...的返回值”的属性。Carcar=newCar();car.Rectangle.Width=4700;car.Rectangle.Height=1600;为什么呢?因为Rectangle是个结构,不是按地址传递的,也就是说第二、第三句使用Rectangle时,根据属性的getreturn语句,实际返回的是Rectangle的副本,而再使用Width、Height时,实际使用到的是副本的。所以将无法设置真正的Car的Rectangle值,所以微软干脆禁止为类中struct属性的属性赋值。解决办法法一、改Rectangle为class。法二、若不能或不该改Rectangle为class,则直接为Rectangle整个赋值,比如:Carcar=newCar();car.Rectangle=newRectangle(4700,1600);...

NPOI-NPOI 创建 Excel 出错“此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用。”

NPOI-NPOI创建Excel出错“此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用。”NPOI-用NPOI根据Excel模板生成文件NPOI-快速处理Excel的类NPOI新版本类略有不同NPOI-真正删除行(非清空数据)的方法NPOI创建Excel出错“此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用。”NPOI是从POI发展来的,POI是Java平台下操作Word、Excel的类库,NPOI是.NET2.0平台下操作Excel的类库(Word没开发下去)。用NPOI操作Excel优点是:速度很快,比Office接口快多了,且不需要安装Office;功能强,比如合并单元格、设置字体、设置边框、设置打印等。NPOI在创建Excel时遇到大数据时,打开Excel出错:“此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。关闭其他文档再试一次可能有用。”这是由于NPOI在Excel中创建了过多的字体造成的,就是Workbook.CreateFont()那句,可能被频繁调用了。...

C# 项目中的 bin 目录和 obj 目录的区别,以及 Debug 版本和 Release 版本的区别

1.关于bin目录和obj目录bin目录用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。2.“是否复制到本地”的设置问题在添加引用时,.NET会记录添加的引用绝对路径,这些设置保存在“每用户”文件中,(Solution.csproj.user),可以通过记事本打开查看。也可以在:项目属性—>通用属性—>引用路径里面查看。如果设置复制到本地为true,在生成项目时会自动拷贝该DLL到项目生成文件夹中(bin目录),否则不会拷贝。在生成项目时,对所添加的引用的是绝对路径,...

谈谈 C# 中的接口

接口的相关陈述一个接口定义了一个契约。接口可以包容方法、C#属性、事件、以及索引器。在一个接口声明中,我们可以声明零个或者多个成员。所有接口成员的默认访问类型都是public。如果在接口成员声明中包括了任何修饰符,那么会产生一个编译器错误。与一个非抽象类类似,一个抽象类必须提供接口中所有成员的实现,只要这些成员在这个类的基类中出现过。接口的理解面向接口编程利用OO的一个基本性质——多态,相同方法不同表现。可以这样想一下,client编写自己程序的时候,如果直接面向一个具体类写程序,那这个程序有个风吹草动的,那client就要受到影响,但如果面向一个接口就不同了,某个具体类变了,只知接口,不知具体类的client就可以完全不动。都说上层领导比较好当,因为可以干的事通常对老百姓来说是虚的,越虚就越不容易错。这个道理在OO中也是适用的。换个视角看,面向接口编程反映OO的另一个方面——封装,接口将具体实现封装了起来,可以不影响客户的情况下切换实现接口的作用,一言以蔽之,就是标志类的类别(typeofclass)。把不同类型的类归于不同的接口,可以更好的管理他们。OO的精髓,我以为,是对对象的抽...
代码星球 代码星球·2023-04-16

C# 中的特性(Attributes)-4

C#中的特性(Attributes)-1C#中的特性(Attributes)-2C#中的特性(Attributes)-3C#中的特性(Attributes)-4我们将在接下来的内容中在我们的Main方法中加入attribute查询代码。查询程序集的Attributes在接下来的代码中,我们先得到当前的进程名称,然后用Assembly类中的LoadForm()方法加载程序集,再有用GetCustomAttributes()方法得到被绑定至当前程序集的自定义attributes,接下来用foreach语句遍历所有attributes并试图把每个attribute转型为Helpattribute(即将转型的对象使用as关键字有一个优点,就是当转型不合法时,我们将不需担心会抛出异常,代之以空值(null)作为结果),接下来的一行就是检查转型是否有效,及是不是为空,跟着就显示Helpattribute的“Description”属性。classQueryApp{   publicstaticvoidMain()   { &nb...
代码星球 代码星球·2023-04-16

C# 中的特性Attributes)-3

C#中的特性Attributes)-1C#中的特性Attributes)-2C#中的特性Attributes)-3C#中的特性Attributes)-4可选参数vs.命名参数可选参数是attribute类构造函数的参数。它们是强制的,必须在每次在attribute绑定至某语言元素时提供一个值。而另一方面,命名参数倒是真正的可选参数,不是在attribute构造函数的参数。为了更加详细的解释,让我们在Help类中添加另外的属性。[AttributeUsage(AttributeTargets.Class,AllowMultiple=false,Inherited=false)]publicclassHelpAttribute:Attribute{   publicHelpAttribute(StringDescription_in)   {       this.description=Description_in;   ...
代码星球 代码星球·2023-04-16

C# 中的特性Attributes)-2

C#中的特性Attributes)-1C#中的特性Attributes)-2C#中的特性Attributes)-3C#中的特性Attributes)-4定义或控制自定义Attribute的用法AttributeUsage类是另一预定义类(译者注:attribute类本身用这个atrributeSystem.AttributeUsage来标记),它将帮助我们控制我们自定义attribute的用法,这就是,我们能为自定义的attribute类定义attributes。它描述了一个自定义attribute类能被怎样使用。AttributeUsage提供三个属性,我们能将它们放置到我们的自定义attribute类上,第一个特性是:ValidOn通过这个属性,我们能指定我们的自定义attribute可以放置在哪些语言元素之上。这组我们能把自定义attribute类放置其上的语言元素被放在枚举器AttributeTargets中。我们可以使用bitwise(译者注:这个词不知道怎么翻译好,但他的意思是可以这么用:[AttributeUsage((AttributeTargets)4,All...
代码星球 代码星球·2023-04-16
首页上一页...23456...下一页尾页