C#中的字节枚举比较给定这个枚举publicenumUserStatus:byte{Approved=1,Locked=2,Expire=3}whenusr为什么这个检查总是返回falsewhen.Status=1if(usr.Status.Equals(UserStatus.Approved))返回真;返回假;比较似乎有效——没有编译时错误或运行时异常。请注意,我不是这段代码的作者,并且想知道为什么作者选择字节类型枚举以及为什么它不能正常工作。因为你必须施法。equals方法将检查UserStatus是否为int(取决于您在属性usr.Status中定义的类型)。然后它会返回not(它是UserStatus类型)所以返回false更好的代码是:returnusr.Status==(int)UserStatus.Approved;任何Equals实现通常检查的第一件事是:“这是正确的类型”。和带字节的UserStatus。(实际上,这只是因为您通过不兼容地使用Equals来装箱项目;在IL级别,在装箱之前它们是无法区分的)您必须将它们作为相同类型的项目进行比较。借用字节的一些代码:publicoverrideboolEquals(objectobj){return((objisbyte)&&(this==((byte)obj)));这是因为Usr.Status包含一个Integer,UserStatus.Approved返回一个String,Approved。因此,值为1的整数不能等于已批准的字符串。因此,您必须通过以下代码将Enum状态转换为整数。请多加注意——if(usr.Status==(int)(UserStatus.Approved))returntrue;返回假;如需转载请注明出处:
