匿名类和匿名方法
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; } }