【问题标题】:Weird C# namespace issue奇怪的 C# 命名空间问题
【发布时间】:2011-05-26 03:55:59
【问题描述】:

我有一个项目,其中包含多个命名空间和许多类 ->

Some.Namepsace. (namespace)
               ExistingClass (class)
               ExistingClass2 (class)
               Constants (class)
                        .Enum (enum)

在这个项目中,我创建了一个类,但命名空间不正确

namespace Some.Namespace.Some.Namespace
{
    public class NewClass {}
}

现在 Some.Namespace.ExistingClass 无法解析对 Some.Namespace.Constants.Enum 的引用 - 它似乎正在寻找 Some.Namespace.Some.Namespace。常量.枚举。

知道为什么吗? NewClass 没有引用任何东西,也没有被任何东西引用,所以我看不出它的命名空间如何影响任何其他组件。我修复了 NewClass 上的命名空间问题,并且修复了它。

【问题讨论】:

  • 您是说它现在可以工作,而您只是想知道它为什么会发生,还是在固定命名空间下仍然无法工作?
  • 现在工作,只是想知道为什么
  • 我很难理解你关于所有类型和命名空间之间关系的描述性文章。不如你给我们稍微复述一下这个问题怎么样?代码是什么样子的?
  • 埃里克怎么样?发布问题时总是很清楚

标签: c# visual-studio-2010 namespaces


【解决方案1】:

Some.Namespace.Some.Namespace 中的类将尝试解析 Some.Namespace.Constants.Enum 如:Some.Namespace.Some.Namespace.Constants.Enum,而不是 Some.Namespace.Constants.Enum

如果您尝试将 Enum 称为:global::Some.Namespace.Constants.Enum,它会起作用。

【讨论】:

  • 很好的明确答案,它不能回答我最初混乱的问题。我澄清了我的问题。
【解决方案2】:

这一定与 Visual Studio/csc 中的 C# 尝试解析引用的方式有关。它看起来像这样:

  • 相对于调用对象的命名空间查看
  • 如果找不到这样的命名空间,请尝试查找引用,就好像它是绝对的一样

在我的例子中,在我添加Some.Namespace.Some.Namespace.NewClass之前,当VS试图解析从Some.Namespace.ExistingClassSome.Namespace.Constants.Enum的引用时,它首先尝试了相对命名空间查找(从ExistingClasse的Some.Namespace开始),没有找到这样的命名空间.然后它尝试绝对查找并找到它。

我添加Some.Namespace.Some.Namespace.NewClass后,它找到了命名空间,发现对象不存在,并决定停止搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2020-01-14
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    相关资源
    最近更新 更多