我正在尝试定义一个扩展方法,该方法可以返回调用定义的类型的对象。
预期用途: Cat acat = guy.GiveMeYourPet<Cat>();
尝试实施
我可以毫不费力地定义这样的泛型方法:
public static T GiveMeYourPet<T>(Person a) { ... }
Cat acat = GiveMeYourPet<Cat>(guy);
或像这样的扩展方法:
public static Cat GiveMeYourPetCat<P>(this P self) where P : Person, ... { ... }
Cat acat = guy.GiveMeYourPetCat();
但是当我尝试做我真正想做的事情时:
public static T GiveMeYourPet<T, P>(this P self) where P : Person, ... { ... }
Cat acat = guy.GiveMeYourPet<Cat>();
编译器期望 GiveMeYourPet() 接收 2 个类型参数(即使一个是通过调用 object 的扩展方法隐式提供的guy
。
我能做些什么来完成这项工作?
请注意,我还尝试颠倒定义参数的顺序,但没有任何变化:
public static T GiveMeYourPet<P, T>(this P self)
以下调用也不起作用,因为您不能在类型规范中进行方法调用:
Cat acat = guy.GiveMeYourPet<guy.GetType(), Cat>();