C# 之linq前奏

    学习linq只是之前,有些知识需要了解一下,这些会在学习linq中用到,下面就来简单说说,大的理论就不必多说了,主要看例子

1、初始化对象

     当然了这个对象可以使类,也可以是集合

     比如现在有一个类Student

View Code
class Student
{
    public string name { getset; }
    public string sex { getset; }
    public int  age { getset; }
}

一般初始化的时候,需要用到new调用构造函数,初始化并赋值

 

View Code
 Student stu = new Student();
        stu.age = "";
        stu.name = "";
        stu.sex = "";

下面我们用另外一种方式初始化并赋值,也就是这里重点说的方式

 

View Code
Student ss = new Student() { name = "张三", age = 25, sex = "" };

这就是.net3.5中新加的初始化对象方式,当然也可以用于集合

  IList<int> ss = new List<int>() {1,2,5,4,5,5};

2、隐式类型

通过var定义类型

var name = "student";
var time = DateTime.Now;

隐式类型var定义,定义后必须复制,属于强类型,不能更改类型

3、匿名类型

    看看下面的例子

 var nm = new { name = "张三", sex = "", age = 25 }; //匿名类型

这就相当于定义了一个nm类,只适合临时使用,就是一个临时类

4、匿名方法

   说匿名方法之前看看委托

  委托:
1、方法作为参数的时候,可以把委托看出是方法变量的类型,可以考虑使用   委托
2、当一个事件,有不同的表现形式的时候,为了方便扩展,比如说,同样是   说话,英国人会说hello,中国人会说你好,可以考虑使用委托
3、事件就是典型的委托,同样是点击(onclick)事件,但是在不同的使用者   中,有着不同的触发事件,我们只需要关心所触发的事件,也就是委托所   对应的注册方法,当触发器(button)被调用的时候,会首先实例化一个   button对象,然后注册相应的委托方法即可
4、在程序中,简单的理解就是,当一个对象,有相同的事件,可以理解为所   使用的方法的参数一致,返回值一致的情况下,需要多次写出这样的方法   ,为了程序的可扩展性和灵活性,建议考虑使用委托,比如事件
5、关于委托的基本用法,比如声明使用delegate,注册使用+=,声明的委托要和注册的方法的返回类型,参数要一致,可以把委托当成类使用,在可以声明类的地方都可以声明类,可以对委托进行new实例化,参考相关文档

附件里有关于委托的例子可以下载下来看看

这里的匿名方法其实就就是对委托的简化

写法:delegate(参数){方法体}

可以直接写委托方法,不用另外写个方法,然后通过+=来赋值

 

View Code
public partial class 匿名方法_nmDemo1 : System.Web.UI.Page
{
    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

上面的例子可简化为

 

View Code
public partial class lamnda_lamndaDemo : System.Web.UI.Page
{
    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、多用于对集合的操作

 

View Code
   protected void Page_Load(object sender, EventArgs e)
    {
        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类型添加一个方法,该怎么做呢,看下面的例子

View Code
public partial class 扩展方法_kzway : System.Web.UI.Page
{
    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需要用到的知识

 

多思考,多创新,才是正道!
posted @ 2012-03-05 17:21  双魂人生  阅读(1464)  评论(0编辑  收藏  举报