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

问题描述 投票:0回答:13

我的程序使用一个名为

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();
        }
      }
    }
c# class types namespaces
13个回答
172
投票

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

这里:

    namespace TimeTest
    {
        class TimeTest
        {
    }

...您正在声明一个与其所在命名空间同名的类型。不要这样做。

现在您显然也遇到了同样的问题

Time2
。我怀疑如果你添加:

    using Time2;

到您的

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

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


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

从名称空间中删除控制词


8
投票

class TimeTest
namespace TimeTest
相冲突。

如果无法更改命名空间和类名:

为类类型创建别名。

using TimeTest_t = TimeTest.TimeTest;

TimeTest_t s = new TimeTest_t();

6
投票

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

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

namespace .+\.TheNameUsedAsBothNamespaceAndType

4
投票

如果您正在开发大型应用程序并且无法更改任何名称,则可以键入

.
从命名空间中选择所需的类型:

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

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

2
投票

当我在名为“Response”的文件夹中创建一个类“Response.cs”时,我遇到了这个问题。所以 VS 将

new Response ()
捕获为文件夹/命名空间。

所以我将类名更改为 StatusResponse.cs 并调用

new StatusResponse()
。这解决了问题。


1
投票

如果您在这里遇到 EF Core 相关问题,请参阅以下提示:

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

这将为您解决。

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


1
投票

出现这种情况是因为文件夹和类的命名相同。因此,命名空间和类名之间存在混淆。

namespace CSEData.Scrapper.UnitOfWork
    {
        public class UnitOfWork
        {
            Task<int> Commit(){};
            void Dispose(){};
        }
    }

看看命名空间,它是“UnitOfWork”。和 看一下类名,也是“UnitOfWork” 所以我已将命名空间名称(在我的例子中为文件夹名称)更改为“UnitOfWorks”


0
投票

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

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

using Student.Models.Db;

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

0
投票

尝试避免为实体提供相同的命名空间名称,例如,如果您使用如下所示的名称空间,并且尝试使用产品作为实体名称来调用实体,您将收到错误

下面是名称空间,某处是您的代码

Company.Project.APPLICATION.Product.Commands

下面的代码将为您提供“产品”是一个“命名空间”,但使用方式类似于“类型”

Product product = new Product()

因此请尝试重命名您的实体或名称空间。


0
投票
namespace Test //Remove .Controller

{ 公共类 HomeController :控制器 { 公共 IActionResult 索引() { 返回视图(); } } }

//这是个好主意..


0
投票

你犯了一个错误,因为你的命名空间和类名是相同的。

   namespace  MySpace
{
    class MyClass
    {
}

要解决此问题,您需要使用 MySpace 命名空间内定义的实际类型,假设您打算使用其中定义的类或类型。例如:

MySpace.MyClass myUser = new MySpace.MyClass();

-5
投票

如果错误是

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

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

© www.soinside.com 2019 - 2024. All rights reserved.