【发布时间】:2015-06-08 12:38:00
【问题描述】:
今天遇到一个小问题,可惜没有找到好的解决办法。我想为一些通用接口创建一个扩展方法。该方法接受不同类型的泛型参数,如下所示
public interface IGenericInterface<TSource>
{
void DoSomething<TDest>();
}
如何以与DoSomething 方法完全相同的方式调用DoSomething2 方法(不传递第一种类型)?
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)。但我很好奇是否有人找到了解决方案。
【问题讨论】:
-
以后,请在您的帖子中包含所有相关代码(作为文本)。小提琴很棒,但它们不能替代实际代码。我已将您的一些代码编辑到您的问题中。
-
这是不可能的。理论上,c# 可能会推断出第一种类型,但它要么推断所有类型参数,要么不推断,你不能进行部分推断。
-
@ryanyuyu 谢谢,我会记住的。不幸的是,肯尼斯只有这样的信息才能找到我。在我看来,如果编译器可以推断出第二种类型,那就没有问题了。在这种情况下扩展方法很难理解。
-
您实际上要解决的问题是什么?很有可能有一种更简单、更惯用的方法来解决它。
标签: c# generics extension-methods