c# - IList 和 IEnumerable 上的扩展方法是否具有相同的名称?

标签 c# .net extension-methods

我写了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/

相关文章:

c# - 使用 NetTopologySuite 计算点之间的地理距离

c# - LINQ to Entities 无法识别嵌套选择中的“System.Linq.IQueryable”方法

c# - 从 DetailsView 获取 BoundField 的值

c# - 如何判断 PropertyInfo 是否属于特定枚举类型?

c# - 联合词典

c# - 是否可以将属性作为参数传递

c# - 从路径中删除“..”和相关文件夹的最快方法?

c# - 为什么此行在 .NET 4 下运行时会导致 VerificationException?

asp.net-mvc - 创建我自己的 HtmlHelper 扩展时出现问题

c# - C# 中的多个重载扩展方法