Lamde表达式

有些迷糊,看例子:
有时遇到这种:Action委托类型中传递匿名方法 obj=>{}的写法
                    _minCommand.DoExecute = new Action<object>(obj => {

                        (obj as Window).WindowState = WindowState.Minimized;//最小化窗口


                    }); 

另一种:Action委托类型中传递匿名方法 ()=>{}的写法

 BeginInvoke(new Action(() => {
                    double Max = 0, Min = 0, Mid = 0, AVR = 0, R = 0, S = 0;
                    int RealN = 0;

                    chartHelp.DataAnalysis(Dic01, 300, ref Max, ref Min, ref Mid, ref AVR, ref R, ref S,ref RealN);
                    chartHelp.DrawLine(Chart_FoldLine01, 300, Max, Min, Mid, Dic01);

                    LB_MAX01.Text = Max.ToString("0.00");
                    LB_MIN01.Text = Min.ToString("0.00");
                    LB_AVR01.Text = Mid.ToString("0.00");
                    LB_N01.Text = "300";
                    LB_RealN01.Text = RealN.ToString();
                    LB_R01.Text = R.ToString("0.00");
                    LB_3σ01.Text = S.ToString("0.000");

                }));

区别:obj=>其实就是(obj)=>{}的写法,代表汗一个参数的匿名方法,参数为obj

    ()=>{}的写法是无参数的匿名方法

我们来看另一种:直接是 t=>方法名省略了{}中括号,这是在只有一个方法传进委托时的写法

tokenSourceDraw = new CancellationTokenSource();
                        ThreadPool.QueueUserWorkItem(t => ThreadDrawLine01(tokenSourceDraw.Token));

等同于

tokenSourceDraw = new CancellationTokenSource();
                        ThreadPool.QueueUserWorkItem(t => {ThreadDrawLine01(tokenSourceDraw.Token);});

 含有多个参数写法:

(x,y)=>{}

总结:

// 无参数的Lambda表达式  
Func<int> getZero = () => 0;  
  
// 带有单个参数的Lambda表达式  
Func<int, bool> isEven = x => x % 2 == 0;  
  
// 带有多个参数的Lambda表达式  
Func<int, int, int> add = (x, y) => x + y;

Lambda 表达式具有隐式类型,由编译器根据上下文推断。但是,我们也可以使用委托或Func/Action类型来显式指定Lambda表达式的类型。

// 使用Func委托类型  
Func<int, int, int> multiply = (x, y) => x * y;  
  
// 使用Action委托类型(无返回值)  
Action<string> displayMessage = message => Console.WriteLine(message);

WPF中开发实例:

        public Action<object> DoAction { get; set; }//定义一个Action<object> 委托类型

        public Func<object, bool> DoCanExecute { get;set; }//定义有返回值的委托类型Func

使用:

 _valueCommand = new CommandBase() { DoAction = new Action<object>(ValueCommandAction),
                                                       DoCanExecute=new Func<object, bool>(CanExcute) };//实例化同时传递方法给委托DoAction在CommandBase中执行,父类引用指向子类对象

 

posted @ 2024-10-08 11:07  灰色小五  阅读(14)  评论(0编辑  收藏  举报