gpt4 book ai didi

c# - 这是什么意思 GoAsync(() => GetPackagesExecute(serviceType));在 C# 中?

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:28 26 4
gpt4 key购买 nike

我有一段代码是这样的:

GoAsync(() => GetPackagesExecute(serviceType));

如何理解这段代码?没有名称方法的大括号是什么意思?

最佳答案

很难准确地告诉您这些方法的作用,因为它们不是“标准”方法...

GoAsync例如可以有各种签名:

void GoAsync(Action action);
void GoAsync(Func<FooType> func);

或者更复杂,比如:

void GoAsync(Expression<Action> action);
void GoAsync(Expression<Func<FooType>> func);

假设 GoAsync有一个像这样的签名:

void GoAsync(Action action);

现在,GoAsync接受委托(delegate)作为参数,即对函数的引用。此函数不得有任何参数且不得返回任何内容(如果我们选择了第二个签名 void GoAsync(Func<FooType> func); ,那么该函数将返回一个 FooType 对象)。 GoAsync然后可以执行该函数引用并对其进行一些操作。注意 GoAsync甚至可以执行该委托(delegate)。

() => GetPackagesExecute(serviceType)

这将创建一个匿名函数,它没有任何参数,主体为 GetPackagesExecute(serviceType) , 所以在它的主体中它只是执行 GetPackagesExecute带有参数 serviceType (这可能是局部变量或字段/属性)。

在函数式语言中,这称为 currying (创建一个调用另一个函数的函数,被调用的函数比创建的函数有更多的参数)。在这种情况下,匿名函数有 0 个参数,GetPackagesExecute有一个参数。

从技术上讲,这个匿名函数可以返回 GetPackagesExecute() 的返回值, 所以它等同于:

void AnonymousMethod()
{
GetPackagesExecute(serviceType);
}

FooType AnonymousMethod()
{
return GetPackagesExecute(serviceType);
}

匿名函数的确切“类型”由 C# 编译器根据 GoAsync() 的签名选择.这叫做 type inference in lambdas .

现在,

GoAsync(() => GetPackagesExecute(serviceType));

一起将:

  • 创建一个匿名函数(它比这复杂一点......这里有一些 C# 编译器的魔法,但你可以忽略它)
  • 为该匿名函数创建一个委托(delegate)(这是隐式的,由 C# 编译器完成)
  • 调用GoAsync将这个委托(delegate)传递给它
  • GoAsync可能会与代表做一些事情

关于c# - 这是什么意思 GoAsync(() => GetPackagesExecute(serviceType));在 C# 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30999437/

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