解析通过委托传递的泛型方法
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] =] 相同泛型方法的泛型参数用法:您需要使用反射来掌握它。您不能从委托实例直接执行此操作。
如果您在此处演示预期用途,我们可能会提供更多有关实现您所追求的方法的指导,但是:它可能不会像您希望的那样简单或直接。
在我的代码中,我尝试动态解析应该将哪个类型参数用于泛型方法调用。
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] =] 相同泛型方法的泛型参数用法:您需要使用反射来掌握它。您不能从委托实例直接执行此操作。
如果您在此处演示预期用途,我们可能会提供更多有关实现您所追求的方法的指导,但是:它可能不会像您希望的那样简单或直接。