1.C#匿名方法

【Anonymous methods】匿名方法,一般使用匿名方法进行回调。

本质上是一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值。

例:

static int Test1(int arg1, int arg2){return arg1 + arg2;}Func<int,int,int>plus = Test1;

改为:

Func<int,int,int>plus = delegate(int arg1,int arg2){return arg1 +arg2;}

2.Lambda表达式

用来代替匿名方法。

lambda表达式的参数不需要声明类型

Func<int,int,int>plus = (arg1,arg2)=>{return arg1 +arg2;}

3.【Event】事件

委托能声明一个局部变量,事件只能在类里面声明
例:

public delegate void MyDelegate();public event MyDelegate mydelgate;//声明了一个委托类型的变量,作为类的成员。加上eventstatic void Main(string[] args){Program p = new Program();p.mydelgate = Test1;p.mydelgate();Console.ReadKey();}

备注:观察者设计模式,被观察者设置一个委托(事件),观察者为委托注册自身方法

委托与事件的区别,事件不能在的外部触发,只能在类的内部。受限制的委托

4.【LINQ】查询代码

方法

from…in…查询的集合

where 查询的条件

select 结果集合返回

扩展方法:

var res = masterList.Where()//传递一个方法作为过滤,或者直接在里面写lambad表达式

联合查询:

from A in AA from B in BBwhere A.? = B.?select new{输出项}------from A in AA join B in BBon A.? equals B.?select new{输出项}var res = masterList.SelectMany(m=>kongfuList,(m,k)=>new {master = m,kongfu = k}).Where(x=>x.master.kongfu==x.kongfu.Name &&x.kongfu.Power>90);

结果排序:

orderby m.age,mLeverl descendingvar res = masterList.Where(m => m.level > 8&&m.Menpai == "丐帮").OrderBy(m => m.Age);

分组查询:

var res = from k in konfuList join m in masterList on k.Name equals m.Kongfuinto groupsselect new {kongfu =k, count = groups.Count(),key=g.key};

量词操作:

bool res = masterList.Any(m => m.Menpai == "长留")//只要一个条件符合返回true

5.【Json】存储和交换文本信息的语法。

using LitJson;JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));//jsonMapper去解析json文本//jsondata对象代表一个数组或者一个对象foreach(JsonData temp in jsonData)//在这里temp代表一个对象{JsonData idvalue = temp["id"];//通过字符串索引器可以取得键值对的值}

一般会创建对象处理

calss Skill{public int id;public override string ToString(){}}List<Skill> skillList = new List<Skill>();foreach(JsonData temp in jsonData){Skill skill = new Skill();skill.id = idskillList.Add(skill);}foreach(var temp in skillList){输出}

6.C#反射

【Reflection】反射

反射指程序可以访问、检测和修改它本身状态或行为的一种能力。

程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。

您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。

然后,可以调用类型的方法或访问其字段和属性。

获取Type对象有两种方式:

Type t = myInstance.GetType();//通过类的实例来获取Type对象

在object类有一个GetType的方法,返回Type对象,因为所有类都是从object继承的,

所以我们可以在任何类型上使用GetType()来获取它的Type对象

Type t = typeof(ClassName);//直接通过typeof运算符和类名获取Type对象获取里面的属性。

Assembly类:

Assembly类在System.Reflection命名空间中定义,它允许访问给定程序集的元数据,

它也包含了可以加载和执行程序集。

7.C#属性,索引

【Accessor】

访问器包含一个 get 访问器或一个 set 访问器。

【Indexer】

访问器包含一个 get 访问器或一个 set 访问器。索引器返回或设置对象实例的一个特定值。带有this关键字,它指向对象实例。

8.C#委托

【Delegate】委托(Delegate)特别用于实现事件和回调方法。即可用静态方法,也可用普通方法。

定义一个委托相当于定义一个新类,所有可以定义类的地方都可以定义委托。

使用委托来调用对象方法。委托的多播使用,方法也可以调用委托

声明语法:delegate

例:

delegate int NumberChanger(int n);//声明委托class......public static int AddNum(int p){num += p;return num;}main......NumberChanger nc1 = new NumberChanger(AddNum); // 创建委托实例nc1(25); // 使用委托对象调用方法

【Func】内置的委托类型

引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型。

【Action】内置的委托类型

委托引用了一个void返回类型的方法,它可以传递0或者多到16个参数类型。

指向带一个int参数的方法:Action a = PrintString

【Generic】泛型

9.C#特性

【Conditional】【Obsolete】【DebuggerStepThrough】

【Attribute】

是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明 性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面 的方括号([ ])来描述的。

预定义特性:

Conditional:这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。

例:

#define DEBUG //定义DEBUGpublic class Myclass{[Conditional("DEBUG")] //如果没有定义DEBUG,则方法语句不运行public static void Message(string msg){Console.WriteLine(msg);}}

Obsolete:这个预定义特性标记不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。

[Obsolete("Don't use OldMethod, use NewMethod instead", true)]static void OldMethod(){Console.WriteLine("It is the old method");}//当尝试编译时,编译器会给出一个错误消息说明,如上。AttributeUsage:语法如下:[AttributeUsage(validon, //规定特性可被放置的语言元素,枚举类型。AllowMultiple=allowmultiple, //提供一个布尔值。如果为 true,则该特性是多用的。默认false。Inherited=inherited //提供一个布尔值。如果为 true,则该特性可被派生类继承。默认false。)]

创建自定义特性

声明自定义特性:AttributeUsage

构建自定义特性:创建一个类继承 System.Attribute

调用者信息特性

调用者信息特性可以访问文件路径,代码行数,调用成员的名称等源代码信息。

这个三个特性名称为CallerFilePath,CallerLineNumber和CallerMemberName

这些特性只能用于方法中的可选参数

10.读取文件几种形式:

string nextLine = sr.ReadLine();//读取一行字符串

string restOfStream = sr.ReadToEnd();//读取流中所有剩余的文本内容

int nextChar = sr.Read();//只读取一个字符

int nChars = 100;

char[] charArray = new char[nChars];

int nCharsRead = sr.Read(charArray,0,nChars); 读取多个字符,第一个参数是要存放的字符数组,

第二个参数是从数组哪一个索引开始放,第三个参数是读取多少个字符 返回值是实际读取的字符的个数

百分之九十的程序员都掌握的C#技巧相关推荐

  1. 一提到Reference 百分之九十九的java程序员都懵逼了

    原来的标题是:"一提到Reference 99.99%的java程序员都懵逼了",为啥改成汉字了呢?吐槽一下,因为CSDN出bug了,如果你用了%做标题,你的文章就别想用它的编辑器 ...

  2. 中国大量程序员都是孔乙己,悲催可笑的心态

    http://www.tianya.cn/techforum/content/414/1/33378.shtml 中国大量程序员都是孔乙己,悲催可笑的心态. 他们从小读着各种书籍,听着来自父母,教师, ...

  3. 100%的程序员都想挑战的算法趣题!| 码书

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

  4. 凌晨三点,各类程序员都在干吗?

    1.凌晨三点,各类程序员都在干吗? 我想问,前端是不是提早下班了? 2.三天后再回头看看自己写的代码 3.代码质量 VS 开发时间 4.程序员的爱情观 5.一定要看到最后 记得点击「在看」,然后转给你 ...

  5. 每个程序员都应该知道的10件事!

    如果你已经编程了一段时间,并且想学习编程,那么你可能在想什么才是一个好的程序员?计算机科学与技术专业毕业生能做些什么,来为软件开发职业生涯做准备? 在本文中,我将分享10件我认为每个程序员都应该知道的 ...

  6. 老程序员都去哪儿了?

    摆在老程序员们面前有三条路,一是转行,二是继续钻研成为技术大牛,三是转型为管理人员. 我最近采访了十五位30岁以上的老程序员们,在此我想发表下我的观点. 网络上总有这类观点-- 「如果所有的技术都想着 ...

  7. 我敢打赌,这是98%的程序员都想挑战的算法趣题!

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

  8. 优秀的程序员都在哪里 如何寻找优秀的程序员?

    优秀的程序员都在哪里 这是你第一次公开招募雇员.如同大多数人一样,你会发布广告,可能也会浏览一些大型的网上论坛,然后你就收到了一吨的简历. 一份份看下去,你会想:"嗯嗯嗯,这人应该可以.&q ...

  9. 每个程序员都应该读的书

    在国外一网站stackoverflow看到了一篇贴子,<每个程序员都应该阅读的书>,里面有上百种书,部分图书已由图灵教育出版.因为除了这里面的书,图灵教育认为还有一些值得程序员去阅读的书, ...

最新文章

  1. SpringMVC启动分析
  2. ASP.NET ListView控件基本操作
  3. learnpython有中文版吗_简介 | Learn Python the Hard Way 中文版
  4. 金蝶结账时显示系统错误h80004005_干货!超详细操作流程!金蝶、用友日常账务处理大全!...
  5. Windows下动态加载可执行代码原理简述
  6. datagrid 重载本地数据_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器
  7. 数据结构——二叉树的层次遍历
  8. qt绘制一圈圆_Qt绘制圆
  9. Linux的 .bashrc 和.bash_profile和.profile文件
  10. ide 两个模块的jdk版本不一样_Java平台模块系统(3)- JDK工具
  11. Make GNN Great Again: GNN 上的预训练和自监督学习
  12. 在线VLOOKUP数据查找工具
  13. 如何构建数据指标体系?
  14. ICLR'17 | 在特征空间增强数据集
  15. SCF: 简单配置门面[转]
  16. [教程] ios 4 以上安装mobile terminal的最简单方法
  17. worldpress或zblog安装时建立数据库连接时出错
  18. 关于谷歌浏览器的自动填充密码
  19. Percona-XtraBackup系列一:安装 perl(Time::HiRes) is needed by percona-xtrabackup-2.2.10-1.el6.x86_64...
  20. 通过游戏策划阶段防治游戏外挂

热门文章

  1. 胜博发表示玩游戏也能做公益!守望先锋为乳癌研究基金会募得一千多万美金
  2. 遭遇PSW Win32 WoWar Trojan Win32 MnLess Trojan IMMSG Win32 TBM
  3. 微信视频号重走公众号老路
  4. Ubuntu下使用ipmsg(飞鸽传书)
  5. 计算机组成与设计 视频,《计算机组成与设计》计算机组成原理视频教程 清华大学王诚著...
  6. 全面深入学习OLE技术
  7. 《计算机网络》期末复习(第1~8章)
  8. jQuery实现的各种前端网页,种类多样
  9. 变色龙给驱动打补丁实现USB驱动无需USBInjectAll.kext
  10. 首届中国网络文学论坛