//匿名函数 当某个函数只会执行一次时 可以写为匿名函数
ProStr(names, delegate(stringname)
{
return "\"" + name + "\"";
});
public delegate int DelCompare(object o1, object o2);
class Program
{
static voidMain(string[] args)
{
object[] o= {"abc","fdsfdsds","fdsfdsfdsfdsfdsfds","fdsfds"};
//object result = GetMax(o, Compare2);
//object result = GetMax(o, delegate(object o1, objecto2) {
// string s1 =(string)o1;
// string s2 =(string)o2;
// returns1.Length - s2.Length;
//});
objectresult = GetMax(o, (object o1,object o2) => {
string s1= (string)o1;
string s2 =(string)o2;
returns1.Length - s2.Length;
});
Console.WriteLine(result);
Console.ReadKey();
}
public static objectGetMax(object[] nums, DelCompare del)
{
object max= nums[0];
for (int i =0; i < nums.Length; i++)
{
//要传一个比较的方法
if(del(max, nums[i]) < 0)
{
max = nums[i];
}
}
return max;
}
}
用到Object就会发生拆装箱问题
这时上面代码改一下 将所有类型都改为T
public delegate int DelCompare<T>(T t1, T t2);
//public delegate int DelCompare(object o1, object o2);
class Program
{
static voidMain(string[] args)
{
int[]nums = { 1, 2, 3, 4, 5 };
int max= GetMax<int>(nums, Compare1);
Console.WriteLine(max);
string[]names = { "abcdefg", "fdsfds", "fdsfdsfdsfdsfdsfdsfdsfsd" };
stringmax1 = GetMax<string>(names, (string s1, string s2) =>
{
returns1.Length - s2.Length;
});
Console.WriteLine(max1);
Console.ReadKey();
}
public static TGetMax<T>(T[] nums, DelCompare<T> del)
{
T max = nums[0];
for (int i =0; i < nums.Length; i++)
{
//要传一个比较的方法
if(del(max, nums[i]) < 0)
{
max = nums[i];
}
}
returnmax;
}
public static intCompare1(int n1, int n2)
{
return n1- n2;
}
}
Lamda表达式
static void Main(string[] args)
{
DelOne del= () => { };//delegate() { };
DelTwodel2 = (string name) => { };//delegate(string name) { };
DelThreedel3 = (string name) => { return name; };//delegate(stringname) { return name; };
List<int>list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
list.RemoveAll(n => n > 4);
foreach (varitem in list)
{
Console.WriteLine(item);
}
Console.ReadKey();
}