【问题标题】:'namespace' but is used like a 'type'“命名空间”,但用作“类型”
【发布时间】:2013-02-07 02:23:36
【问题描述】:

我的程序使用了一个名为Time2 的类。我已将参考添加到TimeTest,但我不断收到错误'Time2' is a 'namespace' but is used like a 'type'

谁能告诉我这个错误是什么以及如何解决它?

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

【问题讨论】:

  • 你有类型 TimeTest.TimeTest (和其他类似的)。不要那样做。不要将类型命名为与其命名空间相同的名称,否则会产生歧义错误。
  • 欲了解更多信息,请参阅:blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
  • 你真的应该在这个问题中添加一个Time2 的(精简的)声明,因为这可能就是问题所在。很可能您在名为 Time2 的命名空间中定义了 Time2
  • TheAce,请下次尝试提供重现问题的最小样本。我已经删除了不必要的行,请添加 Time2 定义以使其完整。

标签: c# class namespaces


【解决方案1】:

我怀疑你有同样的问题至少两次

这里:

namespace TimeTest
{
    class TimeTest
    {
}

...您正在声明一个与它所在的命名空间同名的类型。Don't do that.

现在你显然对Time2 有同样的问题。我怀疑如果你添加:

using Time2;

到您的using 指令列表中,您的代码将编译。但是请,请,请解决更大的问题:有问题的名称选择。 (点击上面的链接可以了解为什么这是一个坏主意的更多细节。)

(此外,除非您真的对编写基于时间的类型感兴趣,否则我建议您不要这样做......我说的是,作为一个确实的人确实这样做了。使用内置功能或第三方库,例如,嗯,mine。正确处理日期和时间令人惊讶。:)

【讨论】:

  • 我更改了命名空间名称并修复了问题。这真的很奇怪,因为它是 VS2019 生成的默认代码。
  • @TimMelton:如果您选择了名称空间名称 TimeTest,然后也选择了类名称 TimeTest,那么它将是默认设置。您必须选择相同的两个...
  • 我现在看到了问题。我正在观看的视频让我创建了一个名为 Controller 的文件夹来放置 Controller 文件。这就是命名空间中的 Controller 的来源。 VS auto 将文件夹名称附加到命名空间。在命名空间解决问题后删除“控制器”一词。
  • 解决了!谢谢。有时 Visual Studio 会显示一些令人沮丧的误导性错误消息。
  • 在我的例子中,我以某种方式设法引用了一个旧库的引用,该库有这个重叠名称问题,我认为我几年前已经用火杀死了。
【解决方案2】:
namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}

从 namepsace 中删除控制器字

【讨论】:

  • 标记为不是答案,我在没有阅读问题时编辑了它
  • 当您尝试从 Microsoft.AspNetCore.Mvc 命名空间中的 Controller 类继承时,如果您的文件夹名为 Controller,而不是 Controller"s",那么您将拥有最终命名空间,因为 Controller 会引发错误,因为命名空间的名称。这个答案是正确的,并帮助我看到我给项目中的文件夹 Controllers 提供了错误的名称。
  • 这解决了我的问题。感谢您非常明确的回答!
  • 快捷方式和非常明确的答案感谢您修复了我的错误!
【解决方案3】:

所有答案都指出了原因,但有时更大的问题是确定所有定义不正确命名空间的位置。使用 Resharper 之类的工具,使用文件夹结构自动调整命名空间,很容易遇到这个问题。

您可以通过使用以下正则表达式在项目/解决方案中搜索来获取创建问题的所有行:

namespace .+\.TheNameUsedAsBothNamespaceAndType

【讨论】:

    【解决方案4】:

    如果您正在开发一个大型应用程序并且无法更改任何名称,您可以输入 . 从命名空间中选择您想要的类型:

    namespace Company.Core.Context{
      public partial class Context : Database Context {
        ...
      }
    }
    ...
    
    using Company.Core.Context;
    someFunction(){
     var c = new Context.Context();
    }
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        class TimeTestnamespace TimeTest 冲突。

        如果不能更改命名空间和类名:

        为类类型创建一个别名。

        using TimeTest_t = TimeTest.TimeTest;
        
        TimeTest_t s = new TimeTest_t();
        

        【讨论】:

          【解决方案7】:

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

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

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

          【讨论】:

            【解决方案8】:

            如果您在这里解决 EF Core 相关问题,请参考以下提示:

            您的迁移子文件夹的名称与数据库上下文的名称不同

            这会帮你解决的。

            我的错误是这样的: ModelSnapshot.cs 错误 CS0118: 上下文是一个命名空间,但使用起来像一个类型

            【讨论】:

              【解决方案9】:

              如果错误是

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

              给出全名空间
              喜欢 @foreach(模型中的 Start.Models.customer 客户)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-12-09
                • 2015-07-22
                • 2021-03-31
                • 2018-03-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多