【发布时间】:2018-10-05 10:51:06
【问题描述】:
我正在尝试调用下面的 Func,但我想要 ???部分在调用时填写。
public void Publish(string topic)
{
...
// 'actions' is a List of delegates, defined as List<Delegate>
for (int i = 0; i < actions.Count; i++)
{
((Func<???>)actions[i])(); // Invokation
}
...
}
操作是这样添加的:
public void Subscribe<T>(string topic, Func<T> action)
{
...
actions.Add(action);
...
}
问题是我不知道什么???将是(因此我的问题)。可能是布尔值,字符串,整数,......我该怎么做呢?我可以以某种方式基于要调用的操作的返回类型吗?
【问题讨论】:
-
欢迎来到 SO。您能否也请提供
actions所在的代码?谢谢 -
你打算如何处理委托的返回值?
-
如果你按照代码中显示的方式调用动作,即
((Func<???>)actions[i])(),返回类型是void(因为你没有使用动作的结果),你应该使用@ 987654326@ 作为actionsIList 的类型。此外,在这种情况下,您不需要在调用动作时施放任何东西,即actions[i]()就足够了。 -
目前我不打算对代表的实际返回类型做任何事情,它们只需要被调用。将作为订阅方法中的操作添加的函数没有参数,但可以有任何返回类型。
-
使用
actions[i].DynamicInvoke(null),看看它是否符合您的要求。问题:您是否需要返回类型?你调用参数action,返回值是多少?看来你会忽略它,你为什么有它?