用委托实现对List的常用方法提取
在开发中,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();
}