[英]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.