【发布时间】:2021-02-25 19:16:03
【问题描述】:
我正在尝试编写一个简单的方法来使代码更具可读性。我正在写一个我有异步任务的部分,所以我使用 Action 作为我的方法的参数,以便在方法完成时获得回调。
简而言之,我的签名总是这样:
public void myAsyncMethod(...params..., Action<other params> onFinish = null)
我使用默认的 Action 作为 null 只是为了给库用户更多的灵活性,但在我的实现中我总是编写这段代码:
if (onFinish != null)
{
UnityMainThreadDispatcher.Instance().Enqueue(
() => onFinish(other params)
);
}
这是因为统一我提供了在主线程上启动动作的可能性,以防用户需要与图形循环交互。 我的想法是:我可以把那段代码放在一个方法中,让方法实现更具可读性吗? 以这样的方式调用那个东西真的很棒:
onFinish?.InvokeOnMainThread(other params);
有点像Action?.Invoke 方式。 因此,我在 c# 中对扩展方法、操作和泛型进行了一些搜索,但我无法掌握使用泛型构建方法来完成我想要达到的目标。 我真的不知道要搜索什么才能达到我的目标,我环顾四周,但可能我还不够好,无法将这些概念放在一起达到我的目标。
到目前为止,我认为这样的事情(不起作用):
public static void InvokeOnMainThread(this Action<T1, T2>, T1 t1, T2 t2){ ... }
public static void InvokeOnMainThread<Action, T1, T2>(Action<T1, T2>, T1 t1, T2 t2){ ... }
我使用带有 2 个参数的 Action 只是因为在我的情况下是最常见的,但我需要带有 0 到 4 个参数的相同调用(但我认为当我能够掌握这个概念时,它会很容易扩展或至少我可以复制它以获得我需要的参数数量)。
【问题讨论】:
-
请提供minimal reproducible example。解释该代码的作用,它与您想要的有何不同。以及具体您需要什么帮助。以上一点都不清楚。
-
您将需要 5 个单独的扩展方法,对应于 0-4 参数的情况。请参阅Can I have a variable number of generic parameters?,其答案基本上是否。
标签: c# extension-methods