我正在做一些异步缓存,我正在使用一个简单的Action回调来让系统的其余部分知道缓存何时完成。
入口点(导致错误的行):
this.StartCoroutine<Action>(SceneUtils.CacheSceneNames, PopulateButtons);
协同法:
public static IEnumerator CacheSceneNames(Action completedCallback) {}
回调方法:
private void PopulateButtons() {}
最后,启动协程的方法:
public static Coroutine StartCoroutine<T>(this MonoBehaviour extends, Func<IEnumerator, T> method, T value) {}
据我所知,所有参数和返回类型都是正确的,但是我收到以下错误:
error CS0123: A method or delegate `CacheSceneNames(System.Action)' parameters do not match delegate `System.Func<System.Collections.IEnumerator,System.Action>(System.Collections.IEnumerator)' parameters
有谁可以指出我做错了什么?这可能是一个协方差问题吗?
答案 0 :(得分:1)
我想您要在Func<T, IEnumerator> method
的参数列表中指定Func<IEnumerator, T> method
而不是StartCoroutine<T>
。
它是Func<T, TResult>
:返回类型是最后一个类型参数 - 您的CacheSceneNames
采用Action
(T
)参数并返回{{ 1}}。