【问题标题】:Using enum type inside interface in C#在 C# 中的接口内使用枚举类型
【发布时间】:2018-09-14 20:47:01
【问题描述】:

我的一个类中有一个 IEnumerable 类型的方法:

protected virtual IEnumerable<T> GetSomething(CrudOptions crudOptions)
{
    ...
}

在解决方案的某处,我将 CrudOptions 定义为:

namespace myProject.Enums 
{ 
    public enum CrudOptions { Delete, Update, Read, Create }
}

当我尝试将我的类中的方法添加到已经存在的接口类时,它告诉我我不能这样做,因为找不到类型或命名空间CrudOptions。 这就是我要添加到接口类的内容:

IEnumerable<SomeTypeClass> GetSomething(CrudOptions crudOptions);

我遇到这个问题是因为我没有正确引用 CrudOptions 类型,还是在接口中我不允许使用定义的类型?

【问题讨论】:

  • 你的界面有using myProject.Enums声明吗?
  • 要隔离问题,请尝试使用完全限定的类型名称,例如IEnumerable&lt;SomeTypeClass&gt; GetSomething(myProject.Enums.CrudOptions crudOptions);
  • 如果您怀疑,将枚举类型与接口一起使用是没有限制的。这是一个命名空间解析问题,就像其他任何问题一样。
  • 是的,我添加了这个,但枚举仍然带有红色下划线,显示此错误:名称空间“myProject”中不存在类型或名称空间名称“枚举”。@adityap
  • 这些是在两个独立的项目中吗?构建是否也失败了,还是只是用过时的缓存进行智能思考?

标签: c# .net interface


【解决方案1】:

根据您的 cmets,似乎 CrudOptions 枚举未在您拥有 GetSomething 方法的同一项目中定义,并且听起来后一个项目没有前一个项目作为参考。具有GetSomething 的项目必须引用定义CrudOptions 的项目。

要添加项目引用,进入解决方案资源管理器,展开包含GetSomething的项目,右键单击References并选择Add reference...,在Reference Manager窗口左侧选择Projects选项卡,勾选定义CrudOptions的项目旁边的框,然后单击OK

之后,在GetSomething 中查看是否可以使用完全限定类型名称myProject.Enums.CrudOptions 进行编译。

【讨论】:

    【解决方案2】:

    是的,您没有使用正确的命名空间。改成这样

    IEnumerable<SomeTypeClass> GetSomething(myProject.Enums.CrudOptions crudOptions);
    

    同样,如果这是在另一个程序集中定义的,那么您必须引用该程序集

    【讨论】:

      【解决方案3】:

      我认为 - 就像其他人告诉你的那样 - 可能存在多个问题:

      • 重复枚举类型 - 解决方案:使用完全限定名称
      • 未引用枚举类型的项目 - 解决方案:添加对枚举类型的项目的引用
      • 未构建项目 - 解决方案:构建项目
      • 我能想象的最后一件事是您需要清理二进制文件 - 解决方案:删除项目中的 bin、obj 文件夹并重建

      这主要是对以上所有答案的总结。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 2016-08-15
        相关资源
        最近更新 更多