到底什么是委托
来写一个返回最大值的方法。
方法一:
static int Max(List<int> nums)
{
int max = nums[0];
foreach (var num in nums)
{
if (num > max)
{
max = num;
}
}
return max;
}
Console.WriteLine("最大值是:"+Max(new List<int> { 1, 2, 3, 4, 5 }));
用枚举返回最小值或最小值
/*获取最大值最小值*/
enum mmnum {
max,
min
}
static int Max(List<int> nums, mmnum retype)
{
int max = nums[0];
foreach (var num in nums)
{
switch (retype)
{
case mmnum.max:
if (num > max)
{
max = num;
}
break;
case mmnum.min:
if (num < max)
{
max = num;
}
break;
default:
break;
}
}
return max;
}
Console.WriteLine("最小值是:" + Max(new List<int> { 1, 2, 3, 4, 5 }, mmnum.min));
代码封闭
封装编号
遍历List>=10的元素
static List<int> Traverse(List<int> nums) {
List<int> list = new List<int>();
foreach (var num in nums)
{
if (num>=10) //num%2 num>=10
{
list.Add(num);
}
}
return list;
}
var list=Traverse(new List<int> {10,2,4,33 });
foreach (var item in list)
{
Console.WriteLine("大于10的值有:"+item);
}
再增加一个功能,遍历一个偶数(num%2==0)
问题一:
无法封装住变化点
引入委托,也叫匿名做匿名方法
声明委托类型
修改形参列表
传入委托
delegate bool Function(int num); //声明了一个function的委托带有num类型返回bool类型
static Function GreatThen10 = delegate (int n) { return n >= 10; };
static Function IsEven = delegate (int n) { return n % 2 == 0; };
static List<int> Traverse(List<int> nums, Function function)
{
List<int> list = new List<int>();
foreach (var num in nums)
{
if (function(num)) //num%2 num>=10
{
list.Add(num);
}
}
return list;
}
var list= Traverse(new List<int>() {1,2,3,4,5,6 }, IsEven);
foreach (var item in list)
{
Console.WriteLine(item);
}
Lambda 表达式(对委托的语法简写)
语句lambda
表达式lambda
var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, delegate (int n) { return n >= 10; }); //语句lambda
var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, (int n) => { return n >= 10; }); //语句lambda (type var,...)=>{......}
var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, (n) => { return n >= 10; }); //语句lambda (var,...)=>{......}
var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, n => { return n >= 10; }); //语句lambda var=>{......}
var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6, 10 }, n => n >= 10); //语句lambda {}=>{......}
系统自带一些泛型委托
var li = new List<int>() { 1, 2, 3, 4, 5, 6, 10 };
li.ForEach(i=>Console.WriteLine(i));
li.Find(n=>n>2 );
li.Sum(n=> { if (n <= 0) return 0; else return n; });
Console.WriteLine(li.Sum(n => { if (n <= 0) return 0; else return n; }) );
最后,看完这篇文章,大家可以用委托来写一个最大值和最小值的方法,不懂的可以问我!