首先写一个能求不同类型数组的委托与方法:(首先要理解委托的定义与会使用委托)
public delegate int DelCompare(object o1,object o2);
static void Main(string[] args)
{
object[] num = { 1, 2, 3, 4, 6, 5, 8, };
object max1 = GetMax(num,(Object o1,Object o2)=> { return (int)o1 - (int)o2; });
Console.WriteLine(max1);
Consonle.ReadKey();
}
static object GetMax(object[] obj,DelCompare del)
{
object max = obj[0];
for (int i = 0; i < obj.Length; i++)
{
if (del(max, obj[i])<0)
{
max = obj[i];
}
}
return max;
}
你会发现每次调用函数都会转换数据类型,并发生拆箱和装箱,使用泛型委托可以解决这个问题
将所有的object类型改为T;
public delegate int DelCompare<T>(T o1,T o2);
static void Main(string[] args)
{
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max= GetMax<int>(nums, (int i1, int i2) => { return i1 - i2; });
Console.WriteLine(max);
Console.ReadKey();
}
static T GetMax<T>(T[] obj,DelCompare<T> del)
{
T max = obj[0];
for (int i = 0; i < obj.Length; i++)
{
if (del(max, obj[i])<0)
{
max = obj[i];
}
}
return max;
}