Lambda表达式和委托的问题
private void button2_Click(object sender, EventArgs e)
{
int a = 0;
Thread obj2 = new Thread(() =>
{
for (int i = 1; i <= 100; i++)
{
a += i;
if (this.label2.InvokeRequired)
{
this.obj=adc1;
//invoke()方法,第一个参数是返回值为void的委托,第二个是给委托对应方法传递参数的
//this.label2.Invoke(new Action<string>(s => { this.label1.Text = s; }), a.ToString());
this.label2.Invoke((string s) => { this.label2.Text = s;}), a.ToString());
Thread.Sleep(200);
}
//判断是否为跨线程
//不能直接对主线程控件赋值 this.label1.Text = a.ToString();
Thread.Sleep(200);
}
});
这两句话有什么区别?我写的第二句为什么报错
static void FindListDelegate()
{
//先创建一个泛型的List类
List<string> list = new List<string>();
list.AddRange(new string[] { "ASP.NET课程", "J2EE课程", "PHP课程", "数据结构课程" });
// Predicate<string> findPredicate = new Predicate<string>(IsBookCategory);
List<string> bookCategory = list.FindAll(new Predicate < string >( s => { s.EndsWith("课程") ? true : false; }));
foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
}
static void FindListLambdaExpression()
{
//先创建一个泛型的List类
List<string> list = new List<string>();
list.AddRange(new string[] { "ASP.NET课程", "J2EE课程", "PHP课程", "数据结构课程" });
//在这里,使用了Lambda来创建一个委托方法
List<string> bookCategory = list.FindAll((string str) => str.EndsWith("课程"));
foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
}
这次为什么 List<string> bookCategory = list.FindAll(new Predicate < string >( s => { s.EndsWith("课程") ? true : false; }));
这句话报错,而这里为什么 List<string> bookCategory = list.FindAll((string str) => str.EndsWith("课程"));
这句话不报错