C# 之linq前奏

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

1、初始化对象

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

     比如现在有一个类Student

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

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

 

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

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

 

ExpandedBlockStart.gif 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(参数){方法体}

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

 

ExpandedBlockStart.gif 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

上面的例子可简化为

 

ExpandedBlockStart.gif 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、多用于对集合的操作

 

ExpandedBlockStart.gif 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类型添加一个方法,该怎么做呢,看下面的例子

ExpandedBlockStart.gif 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需要用到的知识

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值