'namespace'但用作'type'

The*_*Ace 67 c# namespaces class

这是我的程序,类使用它被称为Time2我将引用添加到TimeTest我一直得到错误'Time2'是'命名空间'但是像'类型'一样使用

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

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 97

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

这里:

namespace TimeTest
{
    class TimeTest
    {
}
Run Code Online (Sandbox Code Playgroud)

...你声明一个与它所在的命名空间同名的类型.不要这样做.

现在你显然遇到了同样的问题Time2.我怀疑你是否补充:

using Time2;
Run Code Online (Sandbox Code Playgroud)

到你的using指令列表,你的代码将编译.但请拜托,请解决更大的问题:有问题的名字选择.(按照上面的链接查找有关为什么这是一个坏主意的更多细节.)

(另外,除非你真的对编写基于时间的类型感兴趣,否则我建议你不要这样做......我说那是一个确实做到这一点的人.使用内置功能,或者第三个像嗯,这样的派对图书馆.正确地处理日期和时间是非常毛茸茸的.:)

  • 我更改了命名空间名称并解决了问题。这真的很奇怪,因为它是 VS2019 生成的默认代码。 (2认同)
  • 我现在看到了问题所在。我正在观看的视频让我创建一个名为 Controller 的文件夹来放置 Controller 文件。这就是命名空间中的 Controller 的来源。VS 自动将文件夹名称附加到命名空间中。在命名空间修复问题后删除控制器一词。 (2认同)

小智 15

namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从namepsace中删除控制器字


Mat*_*dal 8

与相class TimeTest冲突namespace TimeTest

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

为类类型创建别名。

using TimeTest_t = TimeTest.TimeTest;

TimeTest_t s = new TimeTest_t();
Run Code Online (Sandbox Code Playgroud)


Ale*_*xei 6

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

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

namespace .+\.TheNameUsedAsBothNamespaceAndType
Run Code Online (Sandbox Code Playgroud)