忽略单个C#文件中全局命名空间中的冲突定义

时间:2019-06-28 07:27:16

标签: c#

我有一个生成的代码文件,该文件创建一个类,但没有为其提供名称空间。因为代码是生成和更新的,所以我不想在那里添加任何其他代码。

using System;

public class Apartment { ... }

我还在名称空间(位于其他dll中)中拥有Apartment类。

using System;
namespace My.Core.Entities {
  public class Apartment  { ... }
}

现在,我尝试在单元测试(引用两个dll)中使用前一个。我尝试使用以下代码忽略全局类。

using System;
using Apartment = Core.Entities.Apartment;
using GlobApartment = global::Apartment

public class Tests {
  private List<Apartment> _apartments = new List<Apartment>();
}

它显示错误Namespace '<global namespace>' contains a definition conflicting with alias 'Apartment'

我了解为什么会发生错误。问题是在此文件中是否有某种方式可以忽略global :: Apartment(我尝试过using GlobApartment事情)?我不想将所有Apartment都更改为My.Core.Entities.Apartment。有什么方法可以在代码中使用单个术语Apartment

2 个答案:

答案 0 :(得分:3)

我尝试使用static using语句,但不起作用-全局名称空间中的语句获得了优先级。我还尝试为全局类型赋予别名(如OP中所示)-不起作用。唯一有效的解决方案是给非全局别名一个别名(如Sinatr所指出)

using ApartmentEntity = Core.Entities.Apartment;

答案 1 :(得分:1)

您不能仅“忽略”一个类,但是可以在单独的顶级名称空间中将所有类型与引用的程序集隔离开,并将仅需要的内容导入名称空间。给具有生成的Apartment类的程序集一个extern alias。那你就可以说

extern alias generated ;
using GeneratedApartment = generated::Apartment ;
// or just use generated::Apartment in your code

生成的Apartment将不再出现在global::根命名空间中,并且您不会发生冲突。