C#学习笔记

    技术2022-05-19  55

    1、.Net Framework提供给我们灵活强大的数据操控能力。比如说,当我们需要对数据进行筛选的时候,我们想到的是“Where”子句,而不是List<T>.FindAll();当我们需要对数据进行排序的时候,我们想到的是“Order By”子句,而不是List<T>.Sort();当我们需要对数据进行分页的时候我们想到的是存储过程,而不是List<T>.GetRange()。

     

    2、Lambda 表达式是一种匿名函数结构,它可以方便的实现委托、查询综合和扩展方法的 delegate 类型参数的初始化定义。

    形式:

    ( 形参列表 ) => { 函数体 }

    可以没有参数列表,如:() => { Console.WriteLine(""); }

     

    3、扩展方法将一个在特定类型上实现的方法引入到该类型上,并可利用该类型直接调用。

    例如,Count() 方法可以计算元素的个数,Count() 方法可以实现在 string、数组、集合、IEnumerable< T> 上,甚至是上文中定义的 Persons 类上。为了在 string 上实现 Count(),可以使用如下代码。using System.Runtime.CompilerServices;

    public class Extensions{    [Extension()]    public int Count(this string source)    {        int count = 0;        foreach (var item in source)        {            count++;        }        return count;    }

        [Extension()]    public int Count<T>(this IEnumerable<T> source) {           int count = 0;           foreach (var item in source) {             count++;         }           return count;       }}

    这样,就在 IEnumerable<T> 上和 string 上都实现了Count()方法。我们可以象使用IEnumerable<T> 和 string 上的成员方法一样使用扩展方法,例如: string s = "Hello, World!";   int c1 = s.Count();     List< int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };   int c2 = list.Count();

     

    4、匿名类型常常用在查询表达式的结果中,因为这种类型的返回值往往是一个包含一种特定类型的 IEnumerable< T>。例如,要从上面的例子中选出年龄大于 21 岁,身高大于 160 厘米的 Person 集合,可以采用如下形式。

    var result = from person in persons where person.Age >= 21 && person.Height >= 160       select new { Name = person.Name, Age = person.Age, Height = person.Height / 100 };     new { Name = person.Name, Age = person.Age, Height = person.Height / 100 } 是一个匿名类型,编译器将对它做如下声明。     public class _Anonymous_Name_Age_Height {       public string Name;       public string Age;       public decimal Height;   }

     

     5、委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

     


    最新回复(0)