鉴于此枚举
public enum UserStatus : byte
{
Approved = 1,
Locked = 2,
Expire = 3
}
为什么在usr.Status = 1
if(usr.Status.Equals(UserStatus.Approved))
return true;
return false;
比较似乎有效 - 没有编译时错误或运行时异常。请注意我不是这段代码的作者,并且想知道为什么作者选择byte
类型的枚举以及为什么它不能正常工作。
答案 0 :(得分:10)
因为你必须施展。
equals方法将检查UserStatus
是否为int
(取决于您在属性usr.Status
中定义的类型)。然后它将返回不是(它的类型为UserStatus
)因此返回false
更好的代码是:
return usr.Status == (int)UserStatus.Approved;
答案 1 :(得分:7)
任何Equals实现通常检查的第一件事是:“这是正确的类型”。 UserStatus
不 与byte
相同。
(实际上,这只是因为您通过不兼容的Equals
使用装箱项目而发生;在IL级别,它们无法区分,直到装箱)
您必须将它们作为相同类型的项进行比较。借用byte
中的一些代码:
public override bool Equals(object obj)
{
return ((obj is byte) && (this == ((byte) obj)));
}
答案 2 :(得分:1)
这是因为Usr.Status
包含一个整数,UserStatus.Approved
返回一个字符串,即Approved
。因此,值1
的整数不能等于字符串Approved
。因此,您必须通过以下代码将Enum状态转换为整数
if (usr.Status == (int)(UserStatus.Approved))
return true;
return false;