- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一段代码是这样的:
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));
一起将:
GoAsync
将这个委托(delegate)传递给它GoAsync
可能会与代表做一些事情关于c# - 这是什么意思 GoAsync(() => GetPackagesExecute(serviceType));在 C# 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30999437/
背景 从 Honeycomb (API 11) 开始,Android 具有允许广播接收器以异步方式运行的功能,在假定它可以终止其进程之前提供大约 10 秒,使用称为“goAsync”的方法: This
我有一个 BroadcastReceiver,我想在其中执行一些脱离 UI 线程的工作。根据 example in the BroadcastReceiver documentation ,我首先调用
我有一个 BroadcastReceiver(或者更具体地说,一个 AppWidgetProvider),我需要在其中的 onReceive() 中执行一些网络操作> 方法...运行时间不是特别长(应
我有一段代码是这样的: GoAsync(() => GetPackagesExecute(serviceType)); 如何理解这段代码?没有名称方法的大括号是什么意思? 最佳答案 很难准确地告诉您这
我是一名优秀的程序员,十分优秀!