用括号括起来的Lambda函数体?

时间:2017-06-21 22:02:27

标签: c# lambda

我正在使用其他人的实用工具方法,而且它似乎使用了lambda表达式语法,我无法阅读。定义了一个参数

Func<Action<int>, Action<Exception>, EventHandler<CustomEventArgs>> getCompleteHandler

Func的原型是

delegate TResult System.Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)

在示例代码中,使用以下方法调用该方法:

getCompleteHandler: (Action<int> complete, Action<Exception> reject) =>
                      (
                        (object sender, CustomEventArgs args) =>
                        {
                            complete(args.IntVar);
                        }
                      )

在调用的第二行,括号直接跟在第一个lambda运算符之后,包含内部lambda。我还没有在其他地方看到过这种语法,但是有一个完整的lambda表达式,我只期望一个类型转换和一个方法体。内部lambda对getCompleteHandler表示什么?

1 个答案:

答案 0 :(得分:0)

string phone = "111-222-8765"; phone = phone.Insert(0, "("); // (111-222-8765 phone = phone.Insert(3, ")"); // (111)-222-8765

(分组)括号实际上被忽略了。编码器可能选择了语法,因为它增加了清晰度(对他/她)或者符合某些约定;这种括号的使用根本不会改变解析或语义。

就个人而言,我不会添加括号。

评估外部lambda-as-Func返回内部lambda-as-Action,在x = 1; x = (1); x = ((1)); x = ..上形成一个闭包。稍后将对返回的Action进行评估。

想象:

complete