如何在调试中访问根命名空间

How to access to root namespace in debug

如何在 debug 中访问具有 duplicated 名称的命名空间中的根命名空间?

例如:

根命名空间: 项目

遇到断点的命名空间: Project.Models.Project(注意重复的项目段)。

代码:

using Project.Models.Project;

namespace Project
{
    class Program
    {
        static void Main(string[] args)
        {
            new Foo().Bar();
        }
    }

    namespace Models
    {
        namespace Project
        {
            public class Foo
            {
                public void Bar()
                {
                     //breakpoint! in this moment I want to access to Bar class (there is no `using Project.Models.Issue;` above)
                     //var boo = new Boo(); Cannot resolve symbol 'Boo'
                }
            }
        }

        namespace Issue
        {
            public class Boo { }
        }
    }
}

观看 window:

只能访问嵌套的 Project 命名空间 (Project.Models.Project),但我无法访问具有相同名称的根命名空间并转到 Project.Models.Issues.Boo

有什么想法吗?

你可以这样做:

var boo = new Models.Issue.Boo();

由于多个 Project 命名空间,编译器有点混乱,但在该范围内,您只需要从 Models 命名空间开始对其进行限定。

你可以做的另一件事来帮助编译器区分不同的 Project 命名空间是在你的 using 指令中使用 Project 的别名:

using Project.Models.Project;
using p = Project;

那么这将起作用:

var boo = new p.Models.Issue.Boo();

Sefe 的回答提供了另一个非常好的选择。

您可以使用全局命名空间别名 (global::) 来表示您希望从根命名空间开始:

var boo = new global::Project.Models.Issues.Boo()

正如@rory.ap 正确指出的那样,在这种情况下您可以不用全局名称空间别名,但有时这是您唯一的选择。考虑这个例子:

namespace Foo {
    class Bar {}
    namespace Bat {
        namespace Foo {
            class Bar {}
        }
        static class Test {
            public static void AccessNS() {
                //The global:: alias is necessary here to avoid a creating a Foo.Bat.Foo.Bar()
                var fooBar = new global::Foo.Bar();
            }
        }
     }
}