如何使用通用接口

时间:2015-06-08 12:38:01

标签: c# generics extension-methods

今天我遇到了一个小问题,遗憾的是我还没有找到一个好的解决方案。我想为一些通用接口创建一个扩展方法。此方法接受不同类型的通用参数,如下所示

public interface IGenericInterface<TSource>
{
    void DoSomething<TDest>();
}

DotNetFiddle

如何以与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)。但我很好奇是否有人找到了解决方案。

1 个答案:

答案 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>