Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在调试中访问根命名空间_C#_Visual Studio_Debugging_Namespaces_Breakpoints - Fatal编程技术网

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

C# 如何在调试中访问根命名空间,c#,visual-studio,debugging,namespaces,breakpoints,C#,Visual Studio,Debugging,Namespaces,Breakpoints,当我们在名称空间中使用重复的名称时,如何在调试中访问根名称空间 例如: 根命名空间:项目 捕获断点的命名空间:Project.Models.Project(注意重复的项目段) 代码: using Project.Models.Project; namespace Project { class Program { static void Main(string[] args) { new Foo().Bar();

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

例如:

根命名空间:项目

捕获断点的命名空间: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 { }
        }
    }
}
观察窗口:

只能访问嵌套的项目命名空间(Project.Models.Project),但无法访问同名的根命名空间并转到Project.Models.Issues.Boo

有什么想法吗?

您可以这样做:

var boo = new Models.Issue.Boo();
由于存在多个
项目
名称空间,编译器有点困惑,但在该范围内,您只需要从
模型
名称空间开始对其进行限定

帮助编译器区分不同
项目
名称空间的另一个方法是在
指令中使用别名来
项目

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();
            }
        }
     }
}

不是重复的,但是相关的,顺便说一句,@rory.ap的相同问题是的,我知道如何解决这个问题,但我很好奇在调试时如何访问这个名称空间,不想取消它并修改代码。两种解决方案都很好;)@Pawel Maga,我也在我这边测试它,没有使用自定义代码,在调试中很难直接查看或访问根命名空间。所以我认为Sefe和rory.ap为这个问题提供了正确的答案。如果可能,您可以将其标记为答案。此外,如果您有好的建议,您可以在此处向产品团队提交uservoice:。