2015-05-11 37 views
0

首先,这是而不是与关于此确切主题的许多高度优先问题相同,除非我错过其中之一。他们都指出,问题是我有一个名字空间与班级同名。这是不是的情况(但它是)。'Class'是一个命名空间,但用作'type'

我开始创建一个名为BatchResizer的新控制台应用程序,并在其中放置了几个类,但随后决定将其移入一个名为BatchResizer.Components的类库中;然后,我将原始控制台应用程序重命名为BatchResizer.ConsoleRunner,将该项目中的所有类更改为namespace BatchResizer.ConsoleRunner.[...],将程序集名称和默认名称空间设置为相同。

有一个标题为BatchResizer一类,但没有标题项目[...].BatchResizer命名空间了,但是当我做var batchResizer = new BatchResizer()我得到了命名空间用于像一类的错误。有项目名称像BatchResizer.ConsoleRunner.[...]BatchResizer.Components.[...],但没有结尾BatchResizer

我已经试过“清洗”和rebulding项目,删除.suo文件,删除所有项目的/bin文件夹中的解决方案,我已经通过每堂课都投入了命名空间冲突的所有相关项目。尽管如此,

+0

有一个名为BatchResizer类,但目前还没有命名的命名空间[...]。BatchResizer – Tom

+1

肯定如果你粘贴所有相关代码的类头部,会让它容易得多。google'msdn namespace' – MethodMan

+0

这是有趣的一部分,它有一个和它的命名空间一样命名的类,你可能不得不'new BatchResizer.BatchResizer()'。尽量避免将任何与父容器命名相同的东西。 –

回答

8

BatchResizer仍然是一个名称空间名称。如果这也是相同的名称为一类,你必须更明确:

namespace BatchResizer.ConsoleRunner 
{ 
    using Components; 

    internal class Program 
    {   
     private static void Main(string[] args) 
     { 
      var batchResizer = new BatchResizer(); 
     } 
    } 
} 

如果你想获得一个:

var batchResizer = new Components.BatchResizer(); 

你也命名空间中添加using语句位令人讨厌,那么C#5.0规范有这样一段话:

9.2空间声明

...名称空间声明的合格标识符可以是单个标识符或由“。”标记分隔的标识符序列。后一种形式允许程序定义一个嵌套名称空间,而不用词汇嵌套几个名称空间声明。例如,

namespace N1.N2 
{ 
    class A {} 
    class B {} 
} 

是语义上等同于

namespace N1 
{ 
    namespace N2 
    { 
     class A {} 
     class B {} 
    } 
} 

所以,即使如你所说,没有class在命名空间BatchResizer宣布,BatchResizer声明一个名字空间。

1

首先,这与关于这个确切主题的许多高调问题不一样,除非我错过其中的一个。他们都指出,问题是我有一个名字空间与班级同名。情况并非如此(但是)。

BatchResizer可能不是“最后的”命名空间,但它仍然是一个命名空间

Namespace : Foo.BatchResizer.Components 
      Foo.BatchResizer.ConsoleRunner 
Class :  Foo.BatchResizer 
相关问题