Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用未知的返回类型调用Func_C#_Delegates_Func - Fatal编程技术网

C# 使用未知的返回类型调用Func

C# 使用未知的返回类型调用Func,c#,delegates,func,C#,Delegates,Func,我正在尝试调用下面的Func,但我想使用???在调用时需要填写其中的一部分 public void Publish(string topic) { ... // 'actions' is a List of delegates, defined as List<Delegate> for (int i = 0; i < actions.Count; i++) { ((Fu

我正在尝试调用下面的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
        }

        ...
    }
公共作废发布(字符串主题)
{
...
//“操作”是一个代理列表,定义为列表
for(int i=0;i
添加的操作如下所示:

    public void Subscribe<T>(string topic, Func<T> action)
    {
        ...

        actions.Add(action);

        ...
    }
public void Subscribe(字符串主题,Func操作)
{
...
动作。添加(动作);
...
}

问题是我不知道什么???将会是(因此我的问题)。可能是布尔值、字符串、int、。。。我该怎么做呢?我是否可以根据要调用的操作的返回类型来确定这一点?

因此,最终使用上面的注释解决了这个问题。所以不是

((Func<???>)actions[i])();

正确地调用了代理。

欢迎使用SO。请同时输入代码,
操作
在哪里填充?感谢您打算对委托的返回值做什么?如果您以代码中显示的方式调用操作,即
((Func)actions[i])()
,则返回类型为
void
(因为您没有使用操作的结果),您应该使用
IList
作为
操作的类型。此外,在这种情况下,调用操作时不需要强制转换任何内容,即
操作[i]()
就足够了。目前我不打算对委托的实际返回类型做任何操作,只需要调用它们。将作为Subscribe方法中的操作添加的函数没有参数,但可以具有任何返回类型。请使用
操作[i]。DynamicInvoke(null)
,查看这是否符合您的要求。问题:您需要退货类型吗?调用参数
action
,返回值是多少?看来你要忽略它了,为什么你有它?
actions[i].DynamicInvoke(null);