C# 如何在调试中访问根命名空间
当我们在名称空间中使用重复的名称时,如何在调试中访问根名称空间 例如: 根命名空间:项目 捕获断点的命名空间:Project.Models.Project(注意重复的项目段) 代码: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();
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:。