枚举装箱与平等为什么返回FalsepublicenumDirections{Up,Down,Left,Right}staticvoidMain(string[]args){boolmatches=IsOneOf(Directions.Right,方向。左,方向。右);控制台.WriteLine(匹配);控制台.Read();}publicstaticboolIsOneOf(Enumself,paramsEnum[]values){foreach(varvalueinvalues)if(self==value)returntrue;返回假;这会返回True吗?publicstaticboolIsOneOf(Enumself,paramsEnum[]values){foreach(varvalueinvalues)if(self.Equals(value))returntrue;返回假;}枚举不实现==等于运算符,但它会覆盖Equals方法。由于它没有实现==,系统执行引用相等性检查。请注意,System.Enum是一个类而不是结构。所以像Directions.Left这样的值被装箱了。在这种特殊情况下,装箱的对象最终会成为单独的对象,因此它们无法通过引用相等性测试。编译器理解==具体的枚举类型(例如Directions),但编译器不会对System.Enum类型执行这种特殊处理。正如JB所说,拳击。您可以通过从枚举更改为方向来看到这一点:publicstaticboolIsOneOf(Directionsself,paramsDirections[]values){返回假;}返回真。以上就是《C#学习教程:枚举装箱与平等分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
