C# 扩展方法-更改命名空间

C# 扩展方法-更改命名空间,c#,C#,我正在使用一个第三方库,它在IQueryable之上包含一系列扩展方法。要使用这些扩展方法,我不希望我的应用程序中充斥着对扩展方法所在的第三方命名空间使用语句的情况 这样我就可以在不久的将来的某个时候尽可能轻松地将其从库中切换出来。但是我不确定什么是最好的方法。我考虑过的一个选项是在项目中创建我自己的扩展方法集(这样我就可以控制名称空间)。问题是我看不出如何维护现有扩展方法的名称。例如: namespace MyProject.Extensions { public static cla

我正在使用一个第三方库,它在IQueryable之上包含一系列扩展方法。要使用这些扩展方法,我不希望我的应用程序中充斥着对扩展方法所在的第三方命名空间使用语句的情况

这样我就可以在不久的将来的某个时候尽可能轻松地将其从库中切换出来。但是我不确定什么是最好的方法。我考虑过的一个选项是在项目中创建我自己的扩展方法集(这样我就可以控制名称空间)。问题是我看不出如何维护现有扩展方法的名称。例如:

namespace MyProject.Extensions {
    public static class IQueryableExtension {
        public static IQueryable<T> Fetch<T, K>(this IQueryable<T> queryable, Expression<Func<T, K>> selector) {
            return queryable.Fetch(selector);
        }
    }
}
名称空间MyProject.Extensions{
公共静态类IQueryableExtension{
公共静态IQueryable获取(此IQueryable可查询,表达式选择器){
返回queryable.Fetch(选择器);
}
}
}
你可以在这里看到问题。当我试图调用我的第三方扩展方法时,它实际上调用自己创建了一个无限循环


我很感激你的帮助。谢谢

您不必将扩展方法用作扩展方法,您可以像静态方法一样使用它们。。。因此,您可以调用第三方获取方法:

ThirdPartyNamespace.Fetch(queryable, selector)

要解决名称的问题,您可以轻松地调用扩展方法,因为它实际上是静态方法:

return Third.Party.Namespace.Fetch(queryable, selector);
话虽如此,我还是不明白你的动机。为什么不使用第三方名称空间呢?在需要此扩展名方法的文件开头使用指令有什么问题?无论如何,您将有许多使用指令。如果由于某种原因,此列表对您来说太长,只需将其包装在一个区域中并折叠该区域:

#region

using Namespace1;
using Namespace2;
using Namespace3;

#endregion

你好,谢谢你的回复。这样做的原因是扩展方法是NHibernate的一部分,我希望将来某个时候迁移到实体框架。因此,我试图尽可能地消除对NHibernate的依赖。