方法或委托参数与委托参数不匹配

Method or delegate parameters do not match delegate parameters

我正在做一些异步缓存,我正在使用一个简单的 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) {}

据我所知所有参数和 return 类型都是正确的,但是我收到以下错误:

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

谁能指出我做错了什么?这可能是协方差问题吗?

我想你想在 StartCoroutine<T> 的参数列表中指定 Func<T, IEnumerator> method 而不是 Func<IEnumerator, T> method

它是 Func<T, TResult>:return 类型是最后一个类型参数 - 而你的 CacheSceneNames 接受一个参数 Action (T) 和 returns IEnumerator.