Car*_*erg 7 c# generics type-inference
我想为泛型类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 { }
Run Code Online (Sandbox Code Playgroud)
如果您可以接受轻微的语法更改,那么这是可能的。
将其更改为:
var a = new A<B, B>();
a.Do().It<B>();
Run Code Online (Sandbox Code Playgroud)
诀窍是 Do 方法是一个扩展方法A<TA, TB>:
public static Doer<TA, TB> Do<TA, TB>(this A<TA, TB> a)
{
return new Doer<TA, TB>(a);
}
Run Code Online (Sandbox Code Playgroud)
诀窍是这个签名让类型推断从中提取 TA 和 TB,a这样您就不必明确指定它们。
Doer 类提供了您需要的泛型方法:
public class Doer<TA, TB>
{
public void It<TC>() { }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |