C# 使用问题,为什么我必须使用全局::MyName.SubName?

C# 使用问题,为什么我必须使用全局::MyName.SubName?,c#,C#,我刚刚添加的解决方案中有一个库项目,每当我需要引用类/枚举时,我都必须使用: 使用全局::MyName.SubName (Resharper会自动建议此操作) 为什么会这样?为什么我不能这样做: using MyName.SubName; 这不管用。即使它这样做了,我也会犯这样的错误: Error 400 Member 'MyName.SubName.Enumerations.SomeEnum.SomeEnumName1' cannot be accessed with an instan

我刚刚添加的解决方案中有一个库项目,每当我需要引用类/枚举时,我都必须使用:

使用全局::MyName.SubName

(Resharper会自动建议此操作)

为什么会这样?为什么我不能这样做:

using MyName.SubName;
这不管用。即使它这样做了,我也会犯这样的错误:

Error   400 Member 'MyName.SubName.Enumerations.SomeEnum.SomeEnumName1' cannot be accessed with an instance reference; qualify it with a type name instead  

我只能假设你的
MyName.SubName
被其他东西隐藏(同名)

有关更多信息,请参阅以下MS文章:

我想这解释了你遇到的情况

在以下情况下,访问全局命名空间中的成员的功能非常有用: 该成员可能被另一个同名实体隐藏

然而,在大型项目中,很有可能 命名空间重复可能以某种形式出现。在这些 在这种情况下,全局名称空间限定符可以保证 可以指定根命名空间


我同意@kelsey的说法,它看起来像是名称空间冲突。另一种解决方法是使用名称空间别名,如

using MNSub = MyName.SubName

// ...else where in code
MNSub.MyType varName = new MNSub.MyType();    // etc.

这至少提供了一种比
global::…

更有意义的语法,因为来自其他名称空间的一个或多个同名类型可能会产生一些歧义。您还使用了哪些名称空间?@user1361315我的评论有帮助吗?这个问题解决了吗?所以我有两个项目:MyProject.Web,我创建的新项目是MyProject.Common。我在MyProject.Web中没有看到任何其他名称空间中有“common”一词,太混乱了。当我浏览代码/名称空间时,我也没有看到任何冲突。@user1361315您可能与框架中的其他内容冲突。编译器无法理解您所引用的内容,所以这就是原因。静态类/方法也可以创建类似的行为,但我认为这里不是这样。