我写了some extension Methods将 IEnumerable 和 IList 转换为字符串。现在,由于 IList 继承自 IEnumerable,我必须以不同的方式命名它们。
我只是想知道是否有办法避免这种情况? 我可以在 IEnumerable 上有一个扩展方法,然后在 IList 上有一个不同的扩展方法,具有相同的名称和相同的签名吗?有点像覆盖,除了扩展方法当然是静态的。
我只想在 List 上使用更高效的方法体,而不必使用第二个方法名称。
是的,我知道在这种特定情况下,我应该先运行一个探查器来真正了解第二种方法是否更好,但我很感兴趣是否通常可以覆盖派生类中的扩展方法。
最佳答案
为什么不做 BCL 所做的事情,并尝试在同一方法中进行向下转换?
像这样的东西:
public static string Foo<T>(this IEnumerable<T> source)
{
var list = source as IList<T>;
if(list != null)
{
// use more efficient algorithm and return
}
// default to basic algorithm
}
如果您绝对必须有两个具有相同名称的独立扩展方法,您可以将它们放在两个不同命名空间的类中,但这意味着您永远不能在同一代码中同时使用它们文件,所以这不是最佳选择。
关于c# - IList 和 IEnumerable 上的扩展方法是否具有相同的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002093/