【问题标题】:Why can't I declare a using statement for a namespace, but can directly declare the namespace before the type?为什么我不能为命名空间声明 using 语句,但可以在类型之前直接声明命名空间?
【发布时间】:2014-06-20 05:35:06
【问题描述】:

我想知道是否有人以前见过这种情况,或者对可能导致这种情况的原因有任何建议。我有一个名为Dashboard 的自定义类,它存在于一个名为Dashboard.Data.Client 的项目中。在同一个项目中,如果我尝试引用类的命名空间,例如:

using Alliance.Dashboard.Data.Client.Models;

那么我不能使用类型Dashboard。但是,在我需要使用Dashboard 的任何地方,我都可以输入完全限定的名称并且它工作正常。示例:

Alliance.Dashboard.Data.Client.Models.Dashboard myDashboard = new Alliance.Dashboard.Data.Client.Models.Dashboard();

我相信你会想知道一些注意事项:

  1. 如果我只是在一个类中键入Dashboard,然后尝试解决它,则该选项不可用。

  2. 如果存在冲突的命名空间,我之前已经看到过这个问题。在这种情况下,必须给出一个完全限定的名称。这里情况不同。没有冲突的命名空间。

  3. 其他类在这个项目中解决得很好。事实上,这里有一个场景:从IDashboardRepository 这个问题存在试图声明Dashboard,就像我描述的那样。 IDashboardRepository 在同一个项目中,但在不同的命名空间中:Alliance.Dashboard.Data.Client.Interfaces。但是,反向工作正常。换句话说,我可以将接口命名空间用作Dashboard 中的 using 语句,但不能在没有完全限定名称的接口中使用Dashboard

作为参考,这里是我的Dashboard 类的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Alliance.Dashboard.Data.Client.Models
{
    public class Dashboard
    {
        public System.Guid DashboardID { get; set; }

        public string DashboardName { get; set; }

        public byte[] Instance { get; set; }

        public bool IsDeleted { get; set; }

        public byte[] Concurrency { get; set; }
    }
}

【问题讨论】:

  • "then I cannot use the type Dashboard" -- 你尝试时收到的编译器错误是什么?
  • 更重要的是,你能想出一个简短的可重现的例子吗?
  • 您当前的命名空间或其他使用导入的名称空间中是否有另一个类或其他名为 Dashboard 的东西?如果不明确,您必须明确声明要使用哪一个。唯一的解决方法是在使用中为那些受骗者起别名。
  • 天哪。我怎么会错过这个?我要跳下一座该死的桥。你可以用过去时认真地开始谈论我。你们立即引导我。问题是类名和项目名是相同的。编译器认为我已经开始输入命名空间的开头而不是类名。我是个彻头彻尾的白痴。抱歉打扰了。

标签: c# .net


【解决方案1】:

嗯,我觉得这个很愚蠢。简单来说,命名空间和类名是一样的。编译器认为我输入了命名空间目录的开头而不是类名。再次感谢您花时间帮助另一个关节头。

【讨论】:

    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多