• 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需要用到的知识

    多思考,多创新,才是正道!
  • 相关阅读:
    React Native 项目常用第三方组件汇总
    react-native-swiper的Github地址
    Navicat for MySQL 使用
    maven项目创7 配置分页插件
    rander()函数执行条件
    RN生命周期
    react-native连接夜神模拟器
    让PHP7达到最高性能的几个Tips
    php安装
    被swoole坑哭的PHP程序员
  • 原文地址:https://www.cnblogs.com/shuang121/p/2380737.html
Copyright © 2020-2023  润新知