首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在C#中为枚举创建接口吗?

我可以在C#中为枚举创建接口吗?
EN

Stack Overflow用户
提问于 2015-12-21 22:57:14
回答 2查看 6.1K关注 0票数 3

假设我有两个枚举,如下:

代码语言:javascript
复制
namespace A
{
    public enum AE
    {
        AE_0,
        AE_1
    }
}

namespace B
{
    public enum BE
    {
        BE_0,
        BE_1
    }
}

我想使用这两个枚举看起来是一个,这样,在一个函数中,我们可以同时使用F(AE)和F(BE),而不需要定义两个函数。

据我所知,我们可以为两个不同的类创建一个接口,这样如果我们将接口指定为参数,就可以使用这两个类。

我能做同样的事情吗?

谢谢。

编辑:我提出了这个问题,因为我已经在名称空间A中有枚举A了。现在,我想在名称空间B中添加枚举B,而不涉及名称空间A中的任何内容。然而,在名称空间A中,我已经有了一个函数F,其中参数是枚举A。现在,我想在命名空间B中使用函数F和枚举B。我得到了一个错误,因为枚举A和枚举B不能相互转换。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-12-21 23:06:44

不,你不能这样做,因为enum是从System.Enum继承的,仅此而已。

此外,尽管有明显的外观,但将接口应用于枚举并不会产生所需的结果,因为枚举成员是以static值实现的,而interface不能指定static值。

最后,如果您确实应该接受两种enum参数,请考虑它们是两个单独的enum,还是带有[ enum ](https://msdn.microsoft.com/en-us/library/system.flagsattribute(v=vs.110%29.aspx))的单个enum

票数 4
EN

Stack Overflow用户

发布于 2015-12-23 20:09:35

正如其他人提到的,最好使用泛型方法,因为C#不允许您为枚举创建接口。我创建了一个快速示例,让我们传递来自不同枚举的成员。

代码语言:javascript
复制
namespace A
{
    public enum AE
    {
        AE_0,
        AE_1
    }

    public class DoSomething
    {
        public static void F<T>(T enumMember) where T : struct
        {
            // exit early if something other than enum entered
            if (!typeof(T).IsEnum)
            {
                throw new ArgumentException("T is not enum");
            }

            // Do whatever you need to do here
            Console.WriteLine(enumMember.ToString());
        }
    }
}

namespace B
{
    public enum BE
    {
        BE_0,
        BE_1
    }
}

namespace C
{
    public class Class1
    {
        public static void processEnum()
        {
            A.DoSomething.F<A.AE>(A.AE.AE_0);
            A.DoSomething.F<B.BE>(B.BE.BE_0);
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34405774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档