namespace A
{
class B
{
}
class A
{
public void f()
{
A.B var = new A.B();
}
}
}
与msvc 2019和.net core 3.1一起编译, 此代码示例给出以下错误:
Error CS0426 The type name 'B' does not exist in the type 'A'
我知道最好不要为类和名称空间使用相同的名称。 但是有什么方法可以解决这种冲突吗?
答案 0 :(得分:6)
由于类B
已被声明为与类A
相同的名称空间,因此无需声明名称空间。因此,只需删除A
,Visual Studio就会找出所需的内容:
namespace A
{
class B
{
}
class A
{
public void f()
{
B var = new B();
}
}
}
更新:
另一种解决方案是:
using _a = A;
namespace A
{
class B
{
}
class A
{
public void f()
{
_a.B var = new _a.B();
}
}
}
答案 1 :(得分:5)
您应该避免使用相同的名称命名类和名称空间的情况。如果您不能或使用第三方代码,则始终可以使用global::
关键字来引用名称空间:
namespace A
{
class B
{
}
class A
{
public void f()
{
global::A.B var = new global::A.B();
}
}
}
答案 2 :(得分:2)
我认为您误解了名称空间的工作方式。您不需要在类A中完全限定B。您可以简单地引用类B,因为两个类都在同一个命名空间中。像这样:
namespace A
{
class B
{
}
class A
{
public void f()
{
B var = new B();
}
}
}