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



我的库中有一个这样的方法

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

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

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

它如何影响依赖于我的库的代码?他们需要重建吗?
他们会遇到编译错误吗?
如果他们使用反射来调用这个方法呢?

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

Foo<T>()在编译后的代码中称为Foo`1。因此,在编译后的代码中,它与Foo()不一样,只是称为Foo

根据你的问题,你有一个公共API,你需要向后兼容。如果是我,我会把它改成如下:

[Obsolete("Call Foo2() instead of the deprecated Foo()", true)]
public void Foo<T>(IQueryable<T> input)
{
    Foo2(input);
}
public void Foo2(IQueryable input)
{
...
}

根据新版本编译的任何东西如果使用旧方法都会报错。这对于内部代码和第三方代码都是正确的,这就是为什么我要在错误消息中包含下一步该做什么的解释。

相关内容

  • 没有找到相关文章

最新更新