
C#
文章平均质量分 76
wawalike
这个作者很懒,什么都没留下…
展开
-
《你不常用的c#之三》:Action 之怪状
例1:[c-sharp] view plaincopystatic void Main(string[] args) { List ls = new List(); for (int i = 0; i { ls.Add(() => Console.WriteLine(i)); } foreach (Actio转载 2015-02-10 17:50:29 · 313 阅读 · 0 评论 -
.Net 4.0 之 Dynamic 动态类型
一、.net4.0主要新特性 .Net4.0在.Net3.5基础上新增的主要特性有:可选参数、命名参数和Dynamic。具体请阅生鱼片的这篇博文。这里我们着重讲解C#4.0的Dynamic特性,对于其他特性大家可以在VS2010内尝试一下。总之.Net在不断进步中。 二、ExpandoObject普通应用 Expand转载 2015-04-01 14:09:28 · 376 阅读 · 0 评论 -
C#探秘系列(一)——ToDictionary,ToLookup
这个系列我们看看C#中有哪些我们知道,但是又不知道怎么用,又或者懒得去了解的东西,比如这篇我们要介绍的toDictionary和ToLookup。 从图中我们看到有四个ToXXX的方法,其中ToArray和ToList,我想大家用的是非常非常多,但是ToDictionary和ToLookup不见得有多少人用了,但不能否认的是这些方法确实很有用。 不多废话了,直接如转载 2015-04-01 14:13:45 · 3495 阅读 · 0 评论 -
C#探秘系列(二)——IsXXX 系列方法
不知道有人做没做过对日外包,如果做过的话,那么对vb.net应该非常熟悉了,当年我刚毕业的时候也做过四个月的外包,那种日子简直不是人过的,就连大楼下面买珠宝的阿姨都说,这些孩子,只看过他们上班,就没见过他们下班,不过有一点好,有个QA的小姑娘天天下午6点教我们倭瓜语,现在还在勾搭中。。。 好了,现在我们看看需求。一: 如何判断“a”是不是数字类型。 ①:在C#中我们转载 2015-04-01 14:14:02 · 315 阅读 · 0 评论 -
C#委托基础一
委托和其委托的方法必须具有相同的签名。签名相同:1.参数类型相同 2.参数数量相同 3.返回值一致 例一[csharp] view plaincopyprint?class Program { public delegate int MathMethod(int x, int y);转载 2015-04-01 14:34:35 · 317 阅读 · 0 评论 -
C#委托基础3——泛型委托
泛型委托[csharp] view plaincopyprint?class Program { // 泛型委托,与普通委托类似,不同之处只在于使用泛型委托要指定泛型参数 public delegate T MyGenericDelegate(T obj1,T obj2);转载 2015-04-01 14:40:42 · 362 阅读 · 0 评论 -
C#委托基础4——泛型委托Func
预定义泛型委托Func[csharp] view plaincopyprint?class Program { double AddInt(int x, int y) { return x + y; } string A转载 2015-04-01 14:52:54 · 490 阅读 · 0 评论 -
C#委托基础6——泛型委托Predicate
此委托返回一个bool值,该委托通常引用一个"判断条件函数"。需要指出的是,判断条件一般为“外部的硬性条件”,比如“大于50”,而不是由数据自身指定,不如“查找数组中最大的元素就不适合”。 例一[csharp] view plaincopyprint?class Program { bool IsGreat转载 2015-04-01 14:56:59 · 347 阅读 · 0 评论 -
C#委托基础8——lambda表达式
[csharp] view plaincopyprint?class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1,转载 2015-04-01 15:01:21 · 311 阅读 · 0 评论 -
C#委托基础9——Invoke与委托
例一[csharp] view plaincopyprint?delegate void AppendStringCallback(string text); private void AppendString(string txt) { this.listView1.Items.Add(txt); }转载 2015-04-01 15:03:23 · 1343 阅读 · 0 评论 -
C#委托基础2——多路委托
多路委托[csharp] view plaincopyprint?class Program { public delegate void SayThingToS(string s); void SayHello(string s) {转载 2015-04-01 14:38:06 · 411 阅读 · 0 评论 -
C#委托基础6——泛型委托Predicate
此委托返回一个bool值,该委托通常引用一个"判断条件函数"。需要指出的是,判断条件一般为“外部的硬性条件”,比如“大于50”,而不是由数据自身指定,不如“查找数组中最大的元素就不适合”。 例一[csharp] view plaincopyprint?class Program { bool IsGreat转载 2015-04-01 14:55:16 · 318 阅读 · 0 评论 -
C#委托基础7——匿名方法
sharp] view plaincopyprint?class Program { double AddInt(int x, int y) { return x + y; } string AddString(string s1, s转载 2015-04-01 14:58:17 · 323 阅读 · 0 评论 -
C#委托基础5——泛型委托Action
对于函数返回值为空的情形,可以使用Action泛型委托[csharp] view plaincopyprint?class Program { // 对于函数返回值为空的情形,可以使用Action泛型委托 void Showstring(string s) {转载 2015-04-01 14:55:21 · 417 阅读 · 0 评论 -
C# IEnumerable<T>、IEnumerator<T>、List<T>、ArrayList、[]数组各各的区别
List 是ArrayList的泛型,ArrayList里边的数据类型是object, List 里边的是具体的某种类型, ArrayList类似于向量,可以存储不同的数据类型在一个数组里边(转换为了object)。 一般使用的时候尽量使用List ,因为ArrayList存取都要进行一次转换。 []类型的数组类似于转载 2015-04-01 17:30:03 · 1276 阅读 · 0 评论 -
30分钟LINQ教程
一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在foreach一个集合的时候, 也要为遍历的集合的元素,指定变量的类型 隐式类型的出现, 程序员就不用再做这转载 2015-03-31 17:57:25 · 291 阅读 · 0 评论 -
ASP.NET中JSON的序列化和反序列化
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式。在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。 一、JSON简介 JSON(JavaScript Object Notati转载 2015-03-09 15:56:23 · 465 阅读 · 0 评论 -
C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,14:31:45,例如我们需要在电子商务网站中存储用户的购物车信息(商品名,对应的商品个数)时,完全可以用 Dictionary 来存储购物车信息,而不需要任何的类型转化。转载 2015-02-11 17:26:41 · 261 阅读 · 0 评论 -
《你不常用的c#之二》:略谈GCHandle
我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作。但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作,这时候你就得要小心了。要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误。所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉,然后最转载 2015-02-10 17:49:55 · 398 阅读 · 0 评论 -
《你不常用的c#之一》:略谈unsafe
msdn里讲到:“在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的:处理磁盘上的现有结构涉及内部包含指针的结构的高级 COM 或平台调用方案性能关键代码对于第一和第二点,主要是调win32的api。但是“性能关键代码”这个非常重要。我来举例引申一下。我们都知道像飞信这种大型IM服务端,难免会面临大量转载 2015-02-10 17:49:23 · 322 阅读 · 0 评论 -
C#中Invoke的用法(转)
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。而所谓转载 2015-02-11 16:09:39 · 543 阅读 · 0 评论 -
《你不常用的c#之五》:Thread与ThreadPool的内存之战
Thread与ThreadPool使用的时候在内存里对象是如何分布的呢? 今天我们就从内存堆的角度分析下两者。 先上小白鼠代码:[c-sharp] view plaincopystatic void Main(string[] args) { for (int i = 0; i转载 2015-02-10 17:51:31 · 600 阅读 · 0 评论 -
《你不常用的c#之四》:Array的小抽屉ArraySegment
一:)略谈ArraySegment顾名思义就是Array区块,数组的小抽屉,用于对该数组中元素的范围进行分隔。比如这个数组: [c-sharp] view plaincopyString[] myArr = { "Overred", "Medloy", "Xiaoguai", "Hare" }; 我们用ArrayS转载 2015-02-10 17:50:53 · 400 阅读 · 0 评论 -
asp.net页面生命周期
对于ASP.NET开发者,理解ASP.NET的页面生命周期是非常重要的。主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性。但是记忆和理解页面生命周期里提供的事件处理方法(method)非常困难。互联网上有很多关于页面生命周期内部机制的文章,所以本文只准备简单覆盖技术的基础部分,更主要的目的是给大家提供一个简单得记忆页面生命周期的方法。准确的记忆ASP.NET页面生命周期转载 2015-02-12 09:52:15 · 312 阅读 · 0 评论 -
Inherits、CodeFile、CodeBehind的区别
Inherits、CodeFile、CodeBehind在 ASP.NET 中使用代码隐藏方法来设计Web 窗体,可使页代码能够更清晰地从 HTML 内容中分离到完全单独的文件中。通常一个 @page 指令如下:Inherits="WebApplication1.WebForm1" %>其中有三个属性(Inherits、CodeFile、CodeBehind)非常容易混转载 2015-02-12 17:29:42 · 288 阅读 · 0 评论 -
C#中的is和as操作符
在C#语言中进行类型转换的操作符is和as。is和as都是强制类型转换,但这两者有什么相同之处和不同之处呢?在使用is和as需要注意哪些事项?下面我们从简单的代码示例去探讨这个简单的问题。is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle。注意,is操作符永远不会抛出异常,请看以下示例:ClassA{.... }转载 2015-02-28 11:05:37 · 487 阅读 · 0 评论 -
C#笔记17:事务
C#笔记17:事务本章概要:1:事务概述2:隐式事务3:显示事务 1:事务概述 当您从网上书店购买书籍时,会用钱(以信贷方式)来交换书籍。如果您的信用良好,则一系列相关操作可确保您和书店可以相应地获得书籍和钱。但如果在交换期间该系列操作中的单个操作发生故障,则整个交换就会失败。结果,您就得不到书籍,而书店也得不到钱。负责使该交换取得平转载 2015-03-03 17:51:50 · 294 阅读 · 0 评论 -
不可小瞧的GetHashCode函数
要实现对象的相等比较,需要实现IEquatable,或单独写一个类实现IEqualityComparer接口。像List的Contains这样的函数,如果我们自己定义的对象不实现IEquatable接口,这个函数会默认调用object的Equels来比较对象,得出非预期的结果。先自定义一个类:public class DaichoKey转载 2015-03-25 17:55:38 · 598 阅读 · 0 评论 -
比较和排序(IComparable和IComparer以及它们的泛型实现)
C#笔记25:比较和排序(IComparable和IComparer以及它们的泛型实现)本文摘要:1:比较和排序的概念;2:IComparable和IComparer;3:IComparable和IComparer的泛型实现IComparable和IComparer; 1:比较和排序的概念 比较:两个实体类之间按>,=,转载 2015-03-03 17:49:08 · 303 阅读 · 0 评论 -
c#开源消息队列中间件EQueue 教程
一、简介EQueue是一个参照RocketMQ实现的开源消息队列中间件,兼容Mono,具体可以参看作者的文章《分享一个c#写的开源分布式消息队列equeue》。项目开源地址:https://github.com/tangxuehua/equeue,项目中包含了队列的全部源代码以及如何使用的示例。二、安装EQueueProducer、Consumer、Broker支持分布式部转载 2015-03-27 13:38:20 · 436 阅读 · 0 评论 -
C#序列化和反序列化
XML序列化需要引用名称空间System.Xml.Serialization,序列化代码如下: public static void Serialize(T o, string filePath) { try { XmlSerializer formatter = new转载 2015-03-09 14:41:50 · 338 阅读 · 0 评论 -
IEnumerable和IEnumerator 详解
下面我们先看IEnumerable和IEnumerator两个接口的语法定义。其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。IEnumerator对象有什么呢?它是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合中的项,转载 2015-04-07 17:52:17 · 384 阅读 · 0 评论