为了账号安全,请及时绑定邮箱和手机立即绑定

请问在C#中使用匿名函数做函数参数,求教语法含义?

/ 猿问

请问在C#中使用匿名函数做函数参数,求教语法含义?

C#
慕容708150 2019-09-13 15:10:16

C#中使用匿名函数做函数参数,求教语法含义


查看完整描述

5 回答

?
慕瓜9086354

Lambda表达式是C#3.0的新内容,如果您之前学习的C#2.0,不认识也就不奇怪了。
给您举个例子。
例如,我定义一个委托:
delegate int Method(int a, int b);
再定义一个方法:
int Add(int a, int b)
{
return a + b;
}
我可能需要这样通过委托调用方法:
Method m += Add;
Console.WriteLine(m(2, 3));
====================================================
但如果用 Lambda 表达式:
Method m += (a ,b) => a + b;
Console.WriteLine(m(2, 3));
可以省去方法的定义。
实际上, Lambda 表达式只是简化了匿名方法的语法而已。

附 C# 2.0 的匿名方法语法:
Method m += delegate(int a, int b) { return a + b; };
Console.WriteLine(m(2, 3));





查看完整回答
反对 回复 2019-09-22
?
元芳怎么了

C#编译器在后台做了很多东西,匿名函数其实从简单的介绍的话,是没有名字的函数,更严格一些,匿名函数是闭包的一个实现,也就是C#通过兰步达表达式(匿名函数)实现了闭包,通过闭包,可以改变局部变量的声明周期,因此闭包有很多很特殊和奇妙的引用。

查看完整回答
反对 回复 2019-09-22
?
ABOUTYOU

你的btn不是孤立的,它是作为一个窗体里的对象存在的
那么你是不是可以通过btn.Form之类的方法获取到这个窗体,从而获取到窗体里的相应属性之类
如果不是公共的,可以通过反射来实现
RoutedEventHandler事件的参数是已经固定了的,就是Object sender, RoutedEventArgs e
所以你无法增加你需要的参数,
不过这个sender,就是触发事件的对象,也就是那个btn,你可以变通一下,给那个btn的某些属性赋值成你希望传递的参数,比如btn.Text = 参数
然后在:btn_Click方法里,把sender转换为btn对象,并获取text属性


查看完整回答
反对 回复 2019-09-22
?
慕村225694

匿名方法与委托一起使用,使用方法见以下代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

using System;

 

class Test

{

    // 第一步:声明委托

    delegate void TestDelegate(string s);

     

    static void Main(string[] args)

    {

        // 第二步:用匿名方法实例化委托

        TestDelegate testDel1 = delegate(string s) { Console.WriteLine(s); };

        // 第二步:或者用Lambda表达式(也是匿名方法)实例化委托

        TestDelegate testDel2 = (x) => { Console.WriteLine(x); };

 

        //第三步:调用

        testDel1("Hello. My name is M and I write lines.");

        testDel2("That's nothing. I'm anonymous method");

    }

}



查看完整回答
反对 回复 2019-09-22
?
慕斯卡3215842

直接return一个变量就可以了,变量的类型编译器会推断出来。但假如等号左边是一个事件,那么返回值类型就要和事件的返回值类型相同了

查看完整回答
反对 回复 2019-09-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信