匿名方法
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 匿名函数
{
//委托1
public delegate string SayHello(string str);
//委托2
public delegate int Sum(int a,int b);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void test1()
{
//1 委托实例的最初的写法
SayHello say = delegate(string str) { return "haha" + str; };
//调用
string hello = say("lizhch");
MessageBox.Show(hello);
//2 演化 可以省略delegate
SayHello say2 = (str) => { return str + "try"; };
//调用
string hello2 = say2("lizhch");
MessageBox.Show(hello2);
//3 演化 如果函数体有返回值,并且只有一句话可将大括号和 return 省掉,参数的括号也可以去掉
SayHello say3 = str => str + "try";
//调用
string hello3 = say3("lizhchtt");
MessageBox.Show(hello3);
//4 多个输入参数的匿名方法的写法-定义一个委托的实例
Sum sum = (a, b) => a + b;
//调用
MessageBox.Show(sum(1, 2).ToString());
//----------------查看扩展方法的演变,-----------------------------
String str2 = "abc";
//string的Where方法的参数是一个Fun<T,bool>的委托,
//1、首先创建一个委托
Func<char, bool> func = (c) => c.ToString() == "a";
//2、将委托的实例传给方法中
var result = str2.Where(func);
//调用
foreach (var c in result)
{
MessageBox.Show(c.ToString());
}
//3、简化的写法
var result2 = str2.Where(c => c.ToString() == "b");
//调用
foreach (var c in result2)
{
MessageBox.Show(c.ToString());
}
//-----------------将委托作为方法传入参数的实例-------------------------------
//调用作为参数的方法,该方法传入的参数就是一个委托的实例
this.Eat((a, b) => a * b);
}
private void button1_Click(object sender, EventArgs e)
{
// this.test1();
this.test2();
}
//方法中可以将委托作为参数
public void Eat(Sum d)
{
MessageBox.Show(d(1, 2).ToString());
}
private void test2()
{
int[] aray = new int[] { 1, 2, 3 };
var result2 = aray.Select((a, b) => (a.ToString() + "-" + b.ToString()));
foreach (var r in result2)
{
MessageBox.Show(r);
}
}
}
}