在开发中,List是经常用到的数据类型。对List操作有一些常用方法,可以用委托和lambda表达式进行提取方法。
首先声明使用到的几个委托
public delegate bool Condi<T>(T ele);
public delegate void Do<T>(T ele); public delegate K Transto<T,K>(T ele);第一个方法 列表内符合条件的元素的个数
/// <summary>
/// 列表内符合条件的元素的个数 /// </summary> public static int Count<T>(List<T> list, Condi<T> condi) { int count = 0; foreach (T e in list) { if (condi(e)) { count++; } } return count; }第二个方法 筛选出符合条件的元素 /// <summary> /// 筛选出符合条件的元素 /// </summary> public static List<T> Filter<T>(List<T> list, Condi<T> condi) { List<T> newlist = new List<T>(); foreach (T e in list) { if (condi(e)) { newlist.Add(e); } } return newlist; }第三个方法 每个元素都执行一个操作 /// <summary> /// 每个元素都执行一个操作 /// </summary> public static void Foreach<T>(List<T> list, Do<T> DO) { foreach (T e in list) { DO(e); } }第四个方法 是否存在符合条件和元素 /// <summary> /// 是否存在符合条件和元素 /// </summary> public static bool Exists<T>(List<T> list, Condi<T> condi) { foreach (T e in list) { if (condi(e)) { return true; } } return false; }第五个方法 转换数据类型 /// <summary> /// 转换数据类型 /// </summary> public static List<K> Trans<T,K>(List<T> list, Transto<T,K> tran) { List<K> newlist = new List<K>(); foreach (T e in list) { newlist.Add(tran(e)); } return newlist; }可以用下面的代码测试一下运行情况
public static void Main(string[] args)
{ //List<int> list = new List<int>( new int[]{0,1,2,-2,3,-1,10,4,6}); List<int> list = new List<int>(new int[] { 0, 100, 20, -20 }); Console.WriteLine("列表的个数是" + list.Count); Console.WriteLine("列表大于0的个数是"+ ListExt.Count<int>( list,e=>e>0)); Console.Write("列表大于0的元素是"); ShowList<int>( ListExt.Filter<int>(list, e => e > 0)); ListExt.Foreach<int>(list, e => Console.Write(e+",")); Console.WriteLine(); Console.WriteLine("列表是否存在小于0的元素" + ListExt.Exists<int>(list, e => e <0)); Console.Write("转换数据类型"); ShowList<string>(ListExt.Trans<int, string>(list, e => e.ToString().ToCharArray()[0].ToString())); } static void ShowList<T>(List<T> list) { foreach(T t in list) { Console.Write(t+","); } Console.WriteLine(); }