学习linq只是之前,有些知识需要了解一下,这些会在学习linq中用到,下面就来简单说说,大的理论就不必多说了,主要看例子
1、初始化对象
当然了这个对象可以使类,也可以是集合
比如现在有一个类Student
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
public string name { get; set; }
public string sex { get; set; }
public int age { get; set; }
}
一般初始化的时候,需要用到new调用构造函数,初始化并赋值
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
stu.age = "";
stu.name = "";
stu.sex = "";
下面我们用另外一种方式初始化并赋值,也就是这里重点说的方式
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
这就是.net3.5中新加的初始化对象方式,当然也可以用于集合
2、隐式类型
通过var定义类型
var time = DateTime.Now;
隐式类型var定义,定义后必须复制,属于强类型,不能更改类型
3、匿名类型
看看下面的例子
这就相当于定义了一个nm类,只适合临时使用,就是一个临时类
4、匿名方法
说匿名方法之前看看委托
委托:
1、方法作为参数的时候,可以把委托看出是方法变量的类型,可以考虑使用 委托
2、当一个事件,有不同的表现形式的时候,为了方便扩展,比如说,同样是 说话,英国人会说hello,中国人会说你好,可以考虑使用委托
3、事件就是典型的委托,同样是点击(onclick)事件,但是在不同的使用者 中,有着不同的触发事件,我们只需要关心所触发的事件,也就是委托所 对应的注册方法,当触发器(button)被调用的时候,会首先实例化一个 button对象,然后注册相应的委托方法即可
4、在程序中,简单的理解就是,当一个对象,有相同的事件,可以理解为所 使用的方法的参数一致,返回值一致的情况下,需要多次写出这样的方法 ,为了程序的可扩展性和灵活性,建议考虑使用委托,比如事件
5、关于委托的基本用法,比如声明使用delegate,注册使用+=,声明的委托要和注册的方法的返回类型,参数要一致,可以把委托当成类使用,在可以声明类的地方都可以声明类,可以对委托进行new实例化,参考相关文档
附件里有关于委托的例子可以下载下来看看
这里的匿名方法其实就就是对委托的简化
写法:delegate(参数){方法体}
可以直接写委托方法,不用另外写个方法,然后通过+=来赋值
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
protected void Page_Load( object sender, EventArgs e)
{
Student ss = new Student();
ss.sayHi( " 张三 ", delegate( string name) { Response.Write( " hi, " + name); });
}
// public void say1(string name)
// {
// Response.Write("hello," + name);
// }
}
public delegate void say( string name);
public class Student
{
public void sayHi( string name,say s)
{
if(s!= null)
{
s(name);
}
}
}
下面讲到的lamnda有进一步的简化了匿名方法的写法
6、lamnda
上面的例子可简化为
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
protected void Page_Load( object sender, EventArgs e)
{
Student ss = new Student();
// ss.sayHi("张三", delegate(string name) { Response.Write("hi," + name); });
ss.sayHi( " 张三 ", ( string name) => { Response.Write( " 你好, " + name); });
}
}
public delegate void say( string name);
public class Student
{
public void sayHi( string name, say s)
{
if (s != null)
{
s(name);
}
}
}
关于limba表达式,只需要记住两点即可
1、简化匿名方法的写法
2、多用于对集合的操作
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
List< int> aa = new List< int>();
aa.Add( 10);
aa.Add( 20);
aa.Add( 30);
aa.Add( 40);
Response.Write(aa.Count(n => n < 30));
Response.Write( " 原来的数是<br> ");
string bb= null;
for ( int i = 0; i <aa.Count; i++)
{
bb += aa[i]+ " ";
}
Response.Write(bb);
Response.Write( " 从大到小排序的数是<br> ");
aa.Sort((x, y) => y - x);
string cc = null;
for ( int i = 0; i < aa.Count; i++)
{
cc += aa[i] + " ";
}
Response.Write(cc);
可以作为一个条件表达式来使用
7、扩展方法
这是.net3.5又一个突破,当我们不知道一个类的内部成员情况的时候,而又想添加一个方法成员该怎么办呢,这个时候就可以使用扩展方法,具体用法是这样的,看下面的例子,如果现在想对string类型添加一个方法,该怎么做呢,看下面的例子
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
protected void Page_Load( object sender, EventArgs e)
{
string input= " 456 ";
if (input.isInt())
{
Label1.Text = " 是整数类型 ";
}
else
{
Label1.Text = " 不是整数类型 ";
}
}
}
static class stringExtend
{
public static bool isInt( this string s)
{
int n;
if (! int.TryParse(s, out n))
{
return false;
}
else
{
if (n > 0)
{
return true;
}
else
{
return false;
}
}
}
}
首先添加的扩展方法要放在静态类中static class stringExtend
其次方法中参数的写法是: this+扩展类+变量
这就是扩展方法的语法
以上几点知识就是学习linq需要用到的知识