“名称空间”,但像“类型”一样使用


83

这是我的程序使用的类,称为Time2。我在TimeTest中添加了引用。

有人可以告诉我这个错误是什么以及如何解决?

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}

8
您键入TimeTest.TimeTest(和其他类似的东西)。不要那样做 不要使用与名称空间相同的名称,会产生歧义错误。
Anthony Pegram


1
您确实应该Time2对此问题添加一个(简化的)声明,因为这可能就是问题所在。您很可能已经Time2在名为Time2
JerKimball

1
TheAce,请下次尝试提供最少的样本来重现该问题。我删除了不必要的行,请添加Time2定义以使其完整。
Alexei Levenkov

Answers:


122

我怀疑您至少两次遇到相同的问题。

这里:

namespace TimeTest
{
    class TimeTest
    {
}

...您要声明的类型与其所在名称空间的名称相同。请勿这样做。

现在,您显然也遇到了同样的问题Time2。我怀疑您是否添加:

using Time2;

using指令列表,您的代码将被编译。但是,请,请,请解决更大的问题:名称的选择有问题。(按照上面的链接查找为什么这是一个坏主意的更多详细信息。)

(此外,除非你真的以书面形式基于时间的类型感兴趣的话,我劝你不要这样做......我说,谁的人正是这样做。使用内置功能,或第三派对库,例如um,mine。正确地处理日期和时间是令人毛骨悚然的。


1
我更改了名称空间名称并解决了该问题。这真的很奇怪,因为它是VS2019生成的默认代码。
蒂姆·梅尔顿

1
@TimMelton:好吧,如果您选择了名称空间名称TimeTest然后还选择了类名称TimeTest,它将是默认设置。您必须选择相同的两个人……
Jon Skeet

我现在看到了问题。我正在观看的视频中,我创建了一个名为Controller的文件夹以放入Controller文件。这是命名空间中Controller的来源。VS auto将文件夹名称附加到名称空间中。命名空间后删除控制器一词即可解决此问题。
蒂姆·梅尔顿

修好了!谢谢。有时,Visual Studio显示一些令人误解的错误消息,这些消息可能令人沮丧。
theITvideos

以我为例,我设法设法引用了一个旧图书馆,该图书馆存在名称重叠的问题,我以为几年前我被大火杀死了。
野猫马特

19
namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}

从namepsace中删除控制器单词


标记为不是答案,当我还没阅读问题时就对其进行了编辑
Danh 2016年

1
当您尝试从Microsoft.AspNetCore.Mvc命名空间中的Controller类继承时,如果您的文件夹名为Controller,而不是Controller“ s”,则您将拥有最终的命名空间,因为Controller会由于命名空间的名称而引发错误。这个答案是正确的,并帮助我看到我在项目中给Controllers文件夹输入了错误的名称。
Elek Guidolin

这解决了我的问题。感谢您的明确回答!
Carthax

1

如果您正在使用大型应用程序且无法更改任何名称,则可以键入a.从名称空间中选择所需的类型:

namespace Company.Core.Context{
  public partial class Context : Database Context {
    ...
  }
}
...

using Company.Core.Context;
someFunction(){
 var c = new Context.Context();
}

0

请检查您的类和名称空间名称是否相同...

当名称空间和类名称相同时会发生这种情况。要使用名称空间时,请做一件事写名称空间的全名。

using Student.Models.Db;

namespace Student.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            List<Student> student = null;
            return View();
        }
    }

0

我在名为“ Response”的文件夹内创建一个类“ Response.cs”时遇到了这个问题。因此,VS正在捕获new Response ()as文件夹/命名空间。

所以我将类名更改为StatusResponse.cs并命名为new StatusResponse()。这解决了问题。


0

所有的答案都表明了原因,但有时更大的问题是识别所有定义不正确名称空间的位置。借助Resharper之类的工具,可以使用文件夹结构自动调整名称空间,因此很容易遇到此问题。

您可以使用以下正则表达式在项目/解决方案中进行搜索,以获取引起问题的所有信息:

namespace .+\.TheNameUsedAsBothNamespaceAndType

-3

如果错误是

第26行:
第27行:@foreach(模型中的客户客户)第28行:{第29行:

提供全名空间,
例如@foreach(Model中的Start.Models.customer客户)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.