为什么扩展方法不适用于命名空间别名?

这可能是一个无知的问题,但我不确定为什么我不能一起使用命名空间别名和扩展方法。

以下示例运行正常:

Program.cs中

using System; using ExtensionMethodTest.Domain; namespace ExtensionMethodTest { class Program { static void Main(string[] args) { var m = new Domain.MyClass(); var result = m.UpperCaseName(); } } } 

MyClass.cs

 using System; namespace ExtensionMethodTest.Domain { public class MyClass { public string Name { get; set; } } } 

MyClassExtensions.cs

 using System; namespace ExtensionMethodTest.Domain { public static class MyClassExtensions { public static string UpperCaseName (this MyClass myClass) { return myClass.Name.ToUpper(); } } } 

但是,当我在Program.cs中将域别名如下:

 using Domain = ExtensionMethodTest.Domain; 

扩展方法不再有效..

当我处理将各种域对象转换为合同对象(假设我有4个域程序集和4个合同程序集)用于Web服务时,这可能会相当令人沮丧。 使用别名将非常方便,因为我可以如下别名并继续使用各种扩展方法(如ToContract等):

 using BillingContracts = Namespace.Billing.Contracts; using IssuingContracts = Namespace.Issuing.Contracts; 

等等…

我期待着答案……我确信这是直截了当的,但是,对于我的生活,我无法弄清楚为什么它不起作用。

谢谢!

确保仍然添加一个无别名的 using语句:

Program.cs中

 using System; using ExtensionMethodTest.Domain; //DON'T FORGET A NON-ALIASED USING using MyDomain = ExtensionMethodTest.Domain; namespace ExtensionMethodTest { class Program { static void Main(string[] args) { var m = new MyDomain.MyClass(); var result = m.UpperCaseName(); } } } 

MyClass.cs

 using System; namespace ExtensionMethodTest.Domain { public class MyClass { public string Name { get; set; } } } 

MyClassExtensions.cs

 using System; namespace ExtensionMethodTest.Domain { public static class MyClassExtensions { public static string UpperCaseName (this MyClass myClass) { return myClass.Name.ToUpper(); } } } 

我也喜欢使用namespace aliasing但在扩展方法的情况下它不起作用。 所以我做的一件事是,我将扩展类的namespace更改为我的main project具有的相同名称空间( 尽管我的扩展类位于主项目的子文件夹中 )。

假设我有一个项目myFirstProj肯定有根类的namespace myFirstProj 。 我的扩展类存在于myFirstProj/Common/myExtensionClass ,包含namespace myFirstProj.Common { //myExtensionClass }

所以我现在所做的是,我将myExtensionClassnamespacenamespace myFirstProj.Common{ //myExtensionClass }更改为namespace myFirstProj{ //myExtensionClass }

现在我可以在我的整个项目myFirstProj事件中使用我的extension methods ,而无需为我的扩展类指定using语句。

我知道这不是一种标准的方法,但是我没有找到任何其他的解决方法,因为对于我的项目,需要为项目命名空间使用namespace aliasing