【问题标题】:How to access to root namespace in debug如何在调试中访问根命名空间
【发布时间】:2017-07-19 09:44:48
【问题描述】:

当我们在 duplicated 名称的命名空间内时,如何在 debug 中访问根命名空间?

例如:

根命名空间: 项目

捕获断点的命名空间: Project.Models.Project(注意重复的 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 { }
        }
    }
}

观看窗口:

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

有什么想法吗?

【问题讨论】:

    标签: c# visual-studio debugging namespaces breakpoints


    【解决方案1】:

    你可以使用全局命名空间别名(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();
                }
            }
         }
    }
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      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 的回答提供了另一个非常好的选择。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-16
      • 2013-05-17
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2011-09-26
      • 1970-01-01
      相关资源
      最近更新 更多