C# 在当前命名空间中存在相同命名空间时引用命名空间

C# 在当前命名空间中存在相同命名空间时引用命名空间,c#,C#,我有一个名称空间为的DLL I引用 Model 有一个班是 Item 所以Model.Item是我试图引用的东西 然而,在我的项目中,我的命名空间是 Logic.Section 这里面也包括 Logic.Model 下面有各种各样的课程 所以当我尝试引用Model.Item的DLL时,它不会让我引用,因为它只会跳回Logic.Model 在这种情况下,我通常会重新构造名称空间,但有没有办法告诉它从最高级别的名称空间开始,然后再向下返回。您可以使用名称空间别名 using Co = Com

我有一个名称空间为的DLL I引用

Model
有一个班是

Item
所以Model.Item是我试图引用的东西

然而,在我的项目中,我的命名空间是

Logic.Section
这里面也包括

Logic.Model
下面有各种各样的课程

所以当我尝试引用Model.Item的DLL时,它不会让我引用,因为它只会跳回Logic.Model


在这种情况下,我通常会重新构造名称空间,但有没有办法告诉它从最高级别的名称空间开始,然后再向下返回。

您可以使用名称空间别名

using Co = Company.Proj.Nested; 

或者在你的情况下

using M = Model

这可能发生在任何第三方DLL、库中,通常我所做的是将名称空间命名为

using myModelInMyDll = Model.Item 

然后使用myModelInMyDll有没有办法告诉它从最高级别的名称空间开始,然后再向下返回。

using global::Model.Item;
可以使用,强制命名空间解析从最高级别开始。因此,在
逻辑
名称空间中

using Model; // resolves to Logic.Model
using global::Model; // resolves to Model.

如果你有很多类和命名空间名称冲突,你应该考虑修改命名策略。如果这是第三方库的结果(有时是这样),则可以使用以下类:

using MyModel = global::Model; //aliases the namespace, so use MyModel.Item
using MyItem = global::Model.Item; //aliases the class, so use MyItem

我会说让你的命名空间更具体/明确。请考虑重构你的命名空间。它只是提高了可读性和可维护性。我不喜欢这样,因为它只是隐藏了糟糕的名称空间设计。@meilke:有时候你无法控制它。如果您不是一个单独/小型团队项目或首席架构师,您有时必须充分利用糟糕的情况。或者您可以使用命名空间之外的