解析通过委托传递的泛型方法

Resolve generic type of method passed via delegate

在我的代码中,我尝试动态解析应该将哪个类型参数用于泛型方法调用。

    private int FooResolver<T1, T2>(bool condition, Func<int> fooMethod)
    {
        if (condition)
        {
            return fooMethod<T1>();
        }

        return fooMethod<T2>();
    }

我创建了一个包装器方法,它接受两个类型参数并根据条件决定使用哪个...但是,C# 似乎不允许这种行为。有什么特别的原因吗?我的代码是否有可行的解决方法?

编辑

看到回复后,我决定将类型定义推迟到处理程序方法的调用者:

private int FooResolver(bool condition, Func<int> foo1, Func<int> foo2)
{
    if (condition)
    {
        return foo1();
    }

    return foo2();
}

...

private int Bar()
{
    return FooResolver(myCondition, MyMethod<FirstType>, MyMethod<SecondType>);
}

委托不是打开通用方法或方法组的抽象;它们是 specific 封闭方法的间接方法 - 即一切都已经解决。您可以 调用 它,并且可以使用反射来找出它指向的内容,但是 仅此而已 (注意:为简单起见,我谈论单播意义上的委托;从技术上讲,它们是多播的,但这个细节在这里可能并不重要)。

如果你想在方法组中获取一个不同的方法(共享相同名称的东西),或者不同的[=22] =] 相同泛型方法的泛型参数用法:您需要使用反射来掌握它。您不能从委托实例直接执行此操作。

如果您在此处演示预期用途,我们可能会提供更多有关实现您所追求的方法的指导,但是:它可能不会像您希望的那样简单或直接。