今天我遇到了一个小问题,遗憾的是我还没有找到一个好的解决方案。我想为一些通用接口创建一个扩展方法。此方法接受不同类型的通用参数,如下所示
public interface IGenericInterface<TSource>
{
void DoSomething<TDest>();
}
如何以与DoSomething2
方法完全相同的方式调用DoSomething
方法(不传递第一种类型)?
public void DoSomething<TDest>()
//Called like below
testClass.DoSomething<object>();
而不是(像我目前的签名)
public static void DoSomething2<TDest, TSource>(this IGenericInterface<TSource> interf)
//called like below
testClass.DoSomething2<string, object>(); // have to repass object type
我知道编译器无法自动推断出第二种类型(link)。但我很好奇是否有人找到了解决方案。
答案 0 :(得分:2)
你的问题是争论 - 你依赖于类型推断来处理第一个泛型类型,但是你想明确指定第二个 - 在C#中是不可能的。
相反,为什么不改变参数的类型?
public static void DoSomething3<T, T2>(this IGenericInterface<T> interf, T2 parameter)
//called like below
testClass.DoSomething3((object)3);
有了这个,T
就会根据testClass
推断出来(只要它不含糊不清),并根据T2
来推断(object)3
。< / p>