从方法签名中删除泛型参数

时间:2016-06-26 13:06:05

标签: c# generics backwards-compatibility method-resolution-order

我的库中有这样的方法

public void Foo<T>(IQueryable<T> input)
{
    //T is never used and the code compiles when I remove T
} 

我想重构它并删除泛型参数。

public void Foo(IQueryable input) { ... }

它如何影响依赖于我的库的代码? 他们需要重建吗? 他们遇到编译错误吗?
如果他们使用反射调用此方法怎么办?

如果我同时创建它们,则方法解析将始终选择通用方法。如何在以后的版本中使泛型的泛型和废弃?

1 个答案:

答案 0 :(得分:3)

Foo<T>()在编译代码中称为Foo`1。因此它与编译代码中仅被称为Foo()的{​​{1}}不同。

根据您的问题,您可以在公共API上使用此功能,并且需要向后兼容性。如果是我,我会将其更改为以下内容:

Foo

如果使用旧方法,任何针对此新版本编译的内容都会抱怨。对于内部代码和第三方代码都是如此,这就是为什么我会在错误消息中包含解释下一步做什么的原因。