如何解决这种嵌套的泛型方法?

时间:2019-06-03 23:17:09

标签: c# generics

说明

我想用一个通用类型输入创建一个通用方法,该输入具有所提供类型输入的通用参数的返回类型。

在此问题的上下文中,不可以选择具有实例参数,因为在调用者上下文中将不存在实例。

示例

给出以下界面:

interface IFoo<T> { }

我想要实现的是类似于以下不当方法声明的内容。

TInner GetFoo<T>() where T : IFoo<TInner>;
T GetFoo<IFoo<T>>();

将这样使用:

class FooA : IFoo<int> { }

int foo = GetFoo<FooA>();

问题

如何正确声明这种方法(如果可能的话)?

谢谢!

1 个答案:

答案 0 :(得分:1)

正如elgonzo的评论中所建议的那样,最自然的解决方案是声明形式

TInner GetFoo<T, TInner>() where T : IFoo<TInner>

尽管您将其声明为TInner GetFoo<T>() where T : IFoo<TInner>的想法是明智的,但目前尚不支持。它类似于更高种类的参数多态性,这是功能性编程爱好者急切期待的功能。