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您可能与框架中的其他内容冲突。编译器无法理解您所引用的内容,所以这就是原因。静态类/方法也可以创建类似的行为,但我认为这里不是这样。