gpt4 book ai didi

c# - Lambda 函数的主体用括号括起来?

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:56 25 4
gpt4 key购买 nike

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

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

以Func的原型(prototype)为

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 代表什么?

最佳答案

x = 1; x = (1); x = ((1)); x = ...

(分组)括号被有效地忽略了。编码人员可能会选择语法,因为它(对他/她)增加了清晰度或以其他方式符合某些约定;这种括号的使用根本不会改变解析或语义。

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


评估外部 lambda-as-Func 返回内部 lambda-as-Action,在 complete 上形成闭包。稍后评估返回的 Action。

想象一下:

// -> Func<Action<int>, Action<Exception>,      // arguments
// Action<object, CustomEventArgs>> // return value
var getCompleteHandler = /* that */

// create the completion handler by invoking the "get" function
// -> Action<object, CustomEventArgs> // same as return value
var completionHandler = getCompletionHandler(
(x) => Console.WriteLine(x),
(ex) => Console.WriteLine("Exception!: " + ex));

// call the completion handler any number of times..
foreach (var i in Enumerable.Range(42)) {
completionHandler(this, new CustomEventArgs { IntVar = i });
}

关于c# - Lambda 函数的主体用括号括起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com