如何在调试中访问根命名空间
How to access to root namespace in debug
如何在 debug 中访问具有 duplicated 名称的命名空间中的根命名空间?
例如:
根命名空间: 项目
遇到断点的命名空间: 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 { }
}
}
}
观看 window:
只能访问嵌套的 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();
}
}
}
}
如何在 debug 中访问具有 duplicated 名称的命名空间中的根命名空间?
例如:
根命名空间: 项目
遇到断点的命名空间: 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 { }
}
}
}
观看 window:
只能访问嵌套的 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();
}
}
}
}