当前位置:  开发笔记 > 编程语言 > 正文

Enum拳击和平等

如何解决《Enum拳击和平等》经验,为你挑选了1个好方法。

为什么这会返回False

    public enum Directions { Up, Down, Left, Right }

    static void Main(string[] args)
    {
        bool matches = IsOneOf(Directions.Right, Directions.Left, Directions.Right);
        Console.WriteLine(matches);
        Console.Read();
    }

    public static bool IsOneOf(Enum self, params Enum[] values)
    {
        foreach (var value in values)
            if (self == value)
                return true;
        return false;
    }

这会返回True吗?

    public static bool IsOneOf(Enum self, params Enum[] values)
    {
        foreach (var value in values)
            if (self.Equals(value))
                return true;
        return false;
    }

Jason Kresow.. 23

枚举不实现==等于运算符,但它确实覆盖了Equals方法.

由于它没有实现==,系统执行引用相等性检查.请注意,System.Enum是一个类而不是结构.因此,诸如Directions.Left之类的值被加框.在这种特殊情况下,盒装对象最终成为单独的对象,因此它们无法通过引用相等性测试.

编译器理解==具体的枚举类型(例如Directions),但编译器不对System.Enum类型执行此特殊处理.



1> Jason Kresow..:

枚举不实现==等于运算符,但它确实覆盖了Equals方法.

由于它没有实现==,系统执行引用相等性检查.请注意,System.Enum是一个类而不是结构.因此,诸如Directions.Left之类的值被加框.在这种特殊情况下,盒装对象最终成为单独的对象,因此它们无法通过引用相等性测试.

编译器理解==具体的枚举类型(例如Directions),但编译器不对System.Enum类型执行此特殊处理.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有