C# ';类别';是一个名称空间,但与';类型';
首先,这和很多关于这个主题的被高估的问题不一样,除非我遗漏了其中一个。所有这些都指出问题在于我有一个与类同名的命名空间。情况并非如此(但确实如此) 我开始创建一个名为C# ';类别';是一个名称空间,但与';类型';,c#,visual-studio,namespaces,C#,Visual Studio,Namespaces,首先,这和很多关于这个主题的被高估的问题不一样,除非我遗漏了其中一个。所有这些都指出问题在于我有一个与类同名的命名空间。情况并非如此(但确实如此) 我开始创建一个名为BatchResizer的新控制台应用程序,并在其中放置了几个类,但后来决定将其移动到一个名为BatchResizer.Components的类库中;然后,我将原始控制台应用程序重命名为BatchResizer.ConsoleRunner,将该项目中的所有类更改为名称空间BatchResizer.ConsoleRunner.[…],
BatchResizer
的新控制台应用程序,并在其中放置了几个类,但后来决定将其移动到一个名为BatchResizer.Components的类库中;然后,我将原始控制台应用程序重命名为BatchResizer.ConsoleRunner
,将该项目中的所有类更改为名称空间BatchResizer.ConsoleRunner.[…]
,将程序集名称和默认名称空间设置为相同
有一个名为BatchResizer
的类,但是项目中没有名为[…]的名称空间。BatchResizer
在项目中,但是当我执行var BatchResizer=new BatchResizer()
时,我得到一个错误,即名称空间被用作类。有些项目的名称类似于BatchResizer.ConsoleRunner.[…]
或BatchResizer.Components.[…]
,但没有以BatchResizer
结尾的项目
我已经尝试过“清理”和重新构建项目,删除.suo
文件,删除解决方案中所有项目的/bin
文件夹,并且我已经检查了所有相关项目中的每个类的名称空间冲突。BatchResizer
仍然是名称空间名称。如果它与类的名称相同,则必须更加明确:
var batchResizer = new Components.BatchResizer();
还可以在命名空间中添加using语句:
namespace BatchResizer.ConsoleRunner
{
using Components;
internal class Program
{
private static void Main(string[] args)
{
var batchResizer = new BatchResizer();
}
}
}
如果你想变得有点怪,那么C#5.0规范会这样说:
9.2命名空间声明
…命名空间声明的限定标识符可以是单个标识符或由“.”标记分隔的标识符序列。后一种形式允许程序定义嵌套的名称空间,而无需在词汇上嵌套多个名称空间声明。比如说,
在语义上等同于
因此,正如您所说,即使在命名空间BatchResizer
中未声明任何class
,BatchResizer
被声明为命名空间。BatchResizer
仍然是命名空间名称。如果它与类的名称相同,则必须更加明确:
var batchResizer = new Components.BatchResizer();
还可以在命名空间中添加using语句:
namespace BatchResizer.ConsoleRunner
{
using Components;
internal class Program
{
private static void Main(string[] args)
{
var batchResizer = new BatchResizer();
}
}
}
如果你想变得有点怪,那么C#5.0规范会这样说:
9.2命名空间声明
…命名空间声明的限定标识符可以是单个标识符或由“.”标记分隔的标识符序列。后一种形式允许程序定义嵌套的名称空间,而无需在词汇上嵌套多个名称空间声明。比如说,
在语义上等同于
因此,正如您所说,即使在命名空间BatchResizer
中未声明任何class
,也会将BatchResizer
声明为命名空间
首先,这和很多关于这个主题的被高估的问题不一样,除非我遗漏了其中一个。所有这些都指出问题在于我有一个与类同名的命名空间。事实并非如此(但事实的确如此)
BatchResizer可能不是“最终”命名空间,但它仍然是一个命名空间
Namespace : Foo.BatchResizer.Components
Foo.BatchResizer.ConsoleRunner
Class : Foo.BatchResizer
首先,这和很多关于这个主题的被高估的问题不一样,除非我遗漏了其中一个。所有这些都指出问题在于我有一个与类同名的命名空间。事实并非如此(但事实的确如此)
BatchResizer可能不是“最终”命名空间,但它仍然是一个命名空间
Namespace : Foo.BatchResizer.Components
Foo.BatchResizer.ConsoleRunner
Class : Foo.BatchResizer
有一个名为BatchResizer的类,但没有名为[…]的名称空间。如果您粘贴所有相关代码的类头,BatchResizersure将使这一过程更加容易。。googlemsdn namespace
这是让一个类命名为与其命名空间相同的有趣部分,您可能必须执行新的BatchResizer.BatchResizer()
。尽量避免将任何名称命名为与其父容器相同的名称。有一个名为BatchResizer的类,但没有名为[…]的名称空间。如果粘贴所有相关代码的类标头,BatchResizersure将使此过程更加简单。。googlemsdn namespace
这是让一个类命名为与其命名空间相同的有趣部分,您可能必须执行新的BatchResizer.BatchResizer()
。尽量避免将任何内容命名为与其父容器相同的名称。