我想为泛型类 A 创建一个扩展方法,它采用另一个泛型类型(在此示例中为 TC),但我想这不可能吗?
class Program
{
static void Main(string[] args)
{
var a = new A<B, B>();
a.DoIt<B>();
}
}
static class Ext
{
public static A<TA, TB> DoIt<TA, TB, TC>(this A<TA, TB> a)
{
return a;
}
}
class A<TA, TB> { }
class B { }
最佳答案
如果您可以接受轻微的语法更改,那么这是可能的。
将其更改为:
var a = new A<B, B>();
a.Do().It<B>();
诀窍在于 Do 方法是 A<TA, TB>
上的扩展方法:
public static Doer<TA, TB> Do<TA, TB>(this A<TA, TB> a)
{
return new Doer<TA, TB>(a);
}
诀窍是这个签名让类型推断从 a
中获取 TA 和 TB这样您就不必明确指定它们。
Doer 类提供了您需要的通用方法:
public class Doer<TA, TB>
{
public void It<TC>() { }
}
关于c# - 通用扩展方法中的额外通用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345140/