繁体   English   中英

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

[英]How to access to root namespace in debug

当我们处于名称重复的名称空间中时,如何在调试中访问根名称空间?

例如:

根名称空间: 项目

捕获断点的命名空间: Project .Models。 项目 (注意重复的“项目”部分)。

码:

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 { }
        }
    }
}

监视窗口:

观察窗

只能访问嵌套的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();
            }
        }
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM