1.匿名类

匿名类编译之后会生成一个具体的泛型类,匿名类的属性是只读的。在临时数据传递时非常方便(linq查询)。匿名类中不能有方法。数据传输(json),数据查询(linq)

   var Person = new { Name = "jack", Age =  };

2.匿名方法
匿名方法编译后会生成一个方法和一个指向该方法的静态的委托对象。匿名方法一定是结合委托使用。一次性使用的方法。匿名方法可以省略参数。

 delegate void Say(string s);
static void Main(string[] args)
{
//1.将匿名方法指向委托的对象,相当于jquery中的匿名方法
Say s = delegate(string ss){
Console.WriteLine(ss);
};
//2.第二种写法,在lambda表达式中比较常用,编译后也会生成这样的
//Say s = (string ss)=>{ Console.WriteLine(ss);};
s("dd");
Say s1 = delegate{ Console.WriteLine(""); };//省略参数
//3. 将匿名方法指向系统委托
Func<int, int> f = delegate(int c)
{
return ++c;
};
Console.WriteLine(f());
Console.Read();
}

3.扩展方法
扩展方法的本质是调用静态方法。当编译器遇见this时,要转成运行时能够认识的语法(特性:ExtensionAttribute)。优先调用实例方法。当你使用其他程序集中的扩展方法时要先将扩展方法所在的程序集导入,并在当前类中引用命名空间。扩展方法可以被继承。

public static   class MethodExten
{
public static string CutStr(this string s, int length)
{
return null; }
}
string tag="www";
tag.CutStr();
MethodExten.CutStr(tag, );//本质

4.系统内置委托:

(1)Action<in T1,….,int T16>,最多可以传入16个参数,无返回值。可以用来遍历集合。
 public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
(2)Predicate<T> 返回bool。public delegate bool Predicate<in T>(T obj);可以用来当条件。
(3)Comparison<T> 返回int。public delegate int Comparison<in T>(T x, T y); //list.Sort
(4)Func<in T1,…,in T16,out TResult>,自定义参数类型。public delegate TResult  Func<in T, out TResult>(T arg);
例题:

 static class Program
{
delegate void Say(string s);
static void Main(string[] args)
{
List<int> list = new List<int>() { , , , }; //1.系统委托1 Action<T>
Action<int> a = delegate(int i) { Console.WriteLine(++i); };
//利用系统委托aciton遍历集合
//list.ForEach(new Action<int>(delegate(int i) { Console.WriteLine(i); }));//同下
list.ForEach(delegate(int i) { Console.WriteLine(i); });
a(); //2.系统委托2 Predicate<T> 返回bool
list = list.FindAll(delegate(int i) { return i > ; }); //3.系统委托3 Comparison<T> 返回int 传入两个参数
list.Sort(new Comparison<int>(delegate(int x, int y) { return x - y; })); //4.系统委托4 Func 自定义参数的委托,最后一个参数为返回值类型
List<Dog> dogList = new List<Dog>() { new Dog() { Name = "jack", Age = } };
var smallDogList= dogList.GetSelect<Dog, SmallDag>(
delegate(Dog d) { return new SmallDag() { Name = d.Name };
});
//*****系统select扩展方法---简化过程 dogList.Select(new Func<Dog, SmallDag>(delegate(Dog c) { return new SmallDag { Name = c.Name }; }));
//将已知的对象转换成匿名类----将大量使用--因为无法确认返回类型,所以必须用var
var dlist= dogList.Select(delegate(Dog c) { return new { Name = c.Name }; });
      dogList.Select((Dog c) => { return new { Name = c.Name }; });//简写版(lambda)
dogList.Select((c) =>{ return new { Name = c.Name }; });//省略参数类型
dogList.Select(c => { return new { Name = c.Name }; });//一个参数省略小括号,多个参数不能省略
dogList.Select(c =>new { Name = c.Name });//方法体只有一句时,省略return和花括号,如果有多条语句则必须加return 和花括号。
Console.Read();
}
//select扩展方法本质说明
static List<U> GetSelect<T, U>(this List<T> l, Func<T, U> func)
{
List<U> list = new List<U>();
foreach (T item in l)
{
list.Add(func(item));
}
return list;
}
} class Dog
{
public string Name { get; set; }
public int Age { get; set; }
}
class SmallDag
{
public string Name { get; set; }
   }

5.Lambda表达式

Lambda表达式:Lambda不使用delegate关键字,而使用  Lambda运算符 =>。Lambda的本质是匿名方法,匿名方法的本质是委托,委托的本质是类。
标准查询运算符(SQO):定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法,这些方法用来对它操作的集合进行查询筛选.例如:where(),select(),orderby(),count(),join()等等。
例题:

 //join 等值连接  ????左外连接呢,怎么写(linq解决)
var lists= listDog.Join(listToy, d => d.Id, t => t.DogId, (d, t) => new {DogId=d.Id,DogName=d.Name,DToyName=t.ToyName }).ToList();
lists.ForEach(c=>Console.WriteLine(c));
//linq的等值连接
var r = (from d in listDog
join t in listToy
on d.Id equals t.DogId
select new {
DogId = d.Id, DogName = d.Name, DToyName = t.ToyName
}).ToList();
//linq的左外连接
var r = (from d in listDog
join t in listToy
on d.Id equals t.DogId
into temp
from ts in temp.DefaultIfEmpty()
select new { DogId = d.Id, DogName = d.Name, DToyName = (ts==null?"不存在":ts.ToyName) }).ToList();
r.ForEach(c => Console.WriteLine(c)); //group 分组查询
IEnumerable<IGrouping<int,Dog>> groups= listDog.GroupBy(d=>d.Age);//获得多个组
foreach (var group in groups)
{
Console.WriteLine("按年龄分组:"+group.Key+"----此组共有:"+group.Count());
foreach (var item in group)//循环每组(有多个Dog)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("--------------");
} //skip take 分页 每页两行
int pageSize = ;
int pageIndex=;
var pageList= listDog.OrderByDescending(d=>d.Id).Skip((pageIndex-)*pageSize).Take(pageSize); static List<Dog> GetDogList()
{
List<Dog> dog = new List<Dog> {
new Dog(){ Id=,Name="jack",Age=},
new Dog(){ Id=,Name="tom",Age=},
new Dog(){ Id=,Name="loly",Age=},
new Dog(){ Id=,Name="kimi",Age=},
new Dog(){ Id=,Name="lily",Age=},
new Dog(){ Id=,Name="saly",Age=},
};
return dog;
}
static List<DogToy> GetDogToyList()
{
List<DogToy> dog = new List<DogToy> {
new DogToy(){ DogId=, ToyName="dd"},
new DogToy(){ DogId=, ToyName="沙发"},
new DogToy(){ DogId=, ToyName="沙发"} };
return dog;
}

6. LINQ

Linq:编译后的IL又生成了标准查询运算符(lambda)。标准运算符中除了分页的方法都能转换成linq。
例题:

 //连接 多表查询---下面为等值连接即内连接
var data = from p in ps
join a in ana on p.PID equals a.PID
select new {PID=p.PID,PName=p.Name,PAge=p.Age,PPhone=p.Phone,AID=a.AID,AName=a.Name };
foreach (var item in data)
{
Console.WriteLine(item.PID+"--"+item.PName+"--"+item.PAge+"--"+item.PPhone+"--"+item.AID+"--"+item.AName);
}
Console.WriteLine("----------------左连接------------------------");
//左连接的写法
var data1 = from p in ps
join a in ana on p.PID equals a.PID
into temp //临时表
from t in temp.DefaultIfEmpty()
select new { PID = p.PID, PName = p.Name, PAge = p.Age, PPhone = p.Phone, AID =( t!=null?t.AID:), AName = (t!=null?t.Name:"null")};
foreach (var item in data1)
{
Console.WriteLine(item.PID + "--" + item.PName + "--" + item.PAge + "--" + item.PPhone + "--" + item.AID+ "--" + item.AName);
}

c#新语法学习笔记的更多相关文章

  1. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  2. 毕业设计 之 五 PHP语法学习笔记

    毕业设计 之 四 PHP语法学习笔记 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 说明:该笔记是对网站编程语言的详细学习 一.PHP基础 0. 关于环境 ...

  3. java8 新特性学习笔记

    Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...

  4. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

  5. doy05循环语法学习笔记

    doy05循环语法学习笔记 一.while循环语法: 1.基本用法示例 x = 1 while x <= 5: print(x) x += 1 2.死循环:永远不结束的循环 如:while Tr ...

  6. mySql 基本语法学习笔记

     create database if not exists yang;    drop database if exists yang;     show databases;   show dat ...

  7. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...

  8. Swift基本语法学习笔记

    Swift与OC的不同点 导入框架的方式 OC使用#import \<UIKit/UIKit.h> Swift使用import UIKit 定义标识符的方式 Swift中定义标识符,必须指 ...

  9. Mustache.js语法学习笔记

    原文地址:http://www.cnblogs.com/flypig88/archive/2012/05/14/2497780.html 看了Mustache的github,学学其中的语法,做个笔记 ...

随机推荐

  1. 清理DBA_DATAPUMP_JOBS中的孤立数据泵作业

    今天在重构数据库时(将表空间中的表.索引转移到其它表空间)时,发现有两个奇怪的对象SYS_EXPORT_FULL_01.SYS_EXPORT_FULL_02搜索了一下,发现这个可能是EXPDP导出异常 ...

  2. Sql Server之旅——第十一站 简单说说sqlserver的执行计划

    我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么执行的,这样 就可以方便的找到sql的缺陷和优化点. 一:执行计划生成过程 说到执 ...

  3. windows 远程桌面研究

    最近因为一个监控相关的项目,深入研究了一下 windows 的 远程桌面的相关知识. 1. 如何让关闭了远程桌面连接的用户,对应的 session 立即退出 windows server. 大家使用 ...

  4. spring中各jar功能及jar包之间的依赖关系

    (1) spring-core.jar 这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工 ...

  5. 烂泥:rsync与inotify集成实现数据实时同步更新

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...

  6. 最短路问题Dijkstra算法

    Dijkstra算法可以解决源点到任意点的最短距离并输出最短路径 准备: 建立一个距离数组d[ n ],记录每个点到源点的距离是多少 建立一个访问数组v[ n ],记录每个点是否被访问到 建立一个祖先 ...

  7. 以Access为支撑,书写一个C#写入记录的案例

    /// <summary> /// 读取Excel文档 /// </summary> /// <param name="Path">文件名称&l ...

  8. AC日记——字符串的展开 openjudge 1.7 35

    35:字符串的展开 总时间限制:  1000ms 内存限制:  65536kB 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h ...

  9. JAVA 字符串驻留池

    一切从String str = new String("abc")说起...    这行代码形式上很简单,其实很复杂.有一个常见的Java笔试题就是问上面这行代码创建了几个Stri ...

  10. [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?

    由于英语对于一个程序员来说,重要性你懂得.因此我会开始逐渐在博客上加入英语的一些东西. 听说不背单词,考英语会是这种下场 在中国, 「学英语」大抵遵循着这样一条 罗蒙诺索夫质量守恒定律 因为英语学着学 ...