Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';类别';是一个名称空间,但与';类型';_C#_Visual Studio_Namespaces - Fatal编程技术网

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将使这一过程更加容易。。google
msdn namespace
这是让一个类命名为与其命名空间相同的有趣部分,您可能必须执行
新的BatchResizer.BatchResizer()
。尽量避免将任何名称命名为与其父容器相同的名称。有一个名为BatchResizer的类,但没有名为[…]的名称空间。如果粘贴所有相关代码的类标头,BatchResizersure将使此过程更加简单。。google
msdn namespace
这是让一个类命名为与其命名空间相同的有趣部分,您可能必须执行
新的BatchResizer.BatchResizer()
。尽量避免将任何内容命名为与其父容器相同的名称。