gpt4 book ai didi

c# - 从方法签名中删除通用参数

转载 作者:太空狗 更新时间:2023-10-29 23:29:19 24 4
gpt4 key购买 nike

我的库中有这样的方法

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在编译代码中。

根据您的问题,您在公共(public) API 上拥有此功能,并且需要向后兼容。如果是我,我会改成下面这样:

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

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

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

关于c# - 从方法签名中删除通用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com