• 匿名类和匿名方法


    1.匿名类、匿名方法

     1 //匿名类:直接用new运算符实例化对象,匿名类的属性是只读的
     2 
     3 var aclass = new { Name = "meng", Age = 10 };
     4 
     5 //匿名方法:以集合为例,在编译过程中生成普通的方法
     6 
     7 List<int> intList = new List<int>() { 1, 2, 3, 4, 8, 9, 10, 70, 28 };
     8 
     9 //1.直接定义一个方法,传入集合方法
    10 
    11 var intlist1 = intList.FindAll(IsCheck);
    12 
    13 Console.WriteLine(string.Join(",", intlist1));
    14 
    15 //2.使用匿名方法:delegate(形参){方法体}
    16 
    17 var intlist2 = intList.FindAll(delegate(int num) { return num >= 10; });
    18 
    19 Console.WriteLine(string.Join(",", intlist2));
    20 
    21 //3.使用lambda表达式
    22 
    23 var intlist3 = intList.FindAll((int num) => { return num >= 10; });
    24 
    25 Console.WriteLine(string.Join(",", intlist3));
    26 
    27 //4.使用简化后的lambda表达式
    28 
    29 var intlist4 = intList.FindAll(num => num >= 10);
    30 
    31 Console.WriteLine(string.Join(",", intlist4));
    32 
    33 Console.ReadKey();
     
     

    2.内置系统委托

     1 //内置系统委托:
     2 
     3 List<int> intList = new List<int>() { 1, 2, 3, 4, 8, 9, 10, 70, 28 };
     4 
     5 //1.public delegate bool Predicate<in T>(T obj) 一个参数返回bool值的委托
     6 
     7 intList.FindAll(i => i >= 10);
     8 
     9 //2.public delegate void Action<in T1,in T2>(T1 arg1,T2 arg2) 有参数无返回值委托的委托
    10 
    11 intList.ForEach(i => Console.WriteLine(i));
    12 
    13 //3.public delegate int Comparison<in T>(T x, T y); 有两个同类型的参数,返回int类型
    14 
    15 intList.Sort((m, n) => n - m);  //倒序排列
    16 
    17 intList.ForEach(i => Console.Write(i + ","));
    18 
    19 //4.public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2); 重点
    20 
    21 //有参数有返回值的委托
    22 intList.FirstOrDefault(c => c == 3); 

    3.扩展方法

     
     
    //定义继承于Person类的子类
    
    var obj = new SubPerson { Name = "孟旭东", Age = 18 };
    
    //通过扩展方法转换为Person类
    Console.WriteLine(obj.ConvertToT<Person>().Name); 
     
    
    //1.扩展方法必须要在静态类中
    
    //2.扩展方法必须是静态方法
    
    //3.扩展方法的第一个参数必须加上this修饰符
    
    //4.扩展方法如果和实例方法同名,若满足重载则构成重载,若不满足,则实例方法优先于扩展方法
    
    //5.扩展方法第一个参数不能用ref、out修饰
    
    public static class ExpandClass
    
    {
    
        public static string FmtyyMMdd(this DateTime now)
    
        {
    
            return now.ToString("yyMMdd");
    
        }
    
        public static string FmtyyMMddHHmmss(this DateTime now, string from)
    
        {
    
            return now.ToString("yyMMddHHmmss") + ":" + from;
    
        }
    
        //与系统函数ToLower构成重载
    
        public static string ToLower(this string str,string from)
    
        {
    
            return str.ToLower()+","+from;
    
        }
    
        //泛型转换数据格式方法
    
        public static T ConvertToT<T>(this object obj)
    
        {
    
            try
    
            {
    
                return (T)obj;
    
            }
    
            catch
    
            {
    
                return default(T);
    
            }
    
        }
    
    }
    
    public class Person
    
    {
    
        public string Name { get; set; }
    
        public int Age { get; set; }
    
    }
    
    public class SubPerson : Person
    
    {
    
        public int Sex { get; set; }
    
    } 
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    extel操作
    postman 使用post方式提交参数值
    json_encode 转化数组时,中文不转义出现乱码的解决方法
    csnd 不好使,所以我来博客园了
    Nodejs 之Ajax的一个实例(sql单条件查询&并显示在Browser端界面上)
    JS 之JSON
    Nodejs sql模块及模块化思想
    Nodejs之Ajax
    Nodejs 之express框架的应用---简单的登录界面
    Nodejs 入门 12-28
  • 原文地址:https://www.cnblogs.com/notniu/p/4359399.html
Copyright © 2020-2023  润新知