Byte enum comparison in C#

后端 未结 3 686
梦如初夏
梦如初夏 2021-01-11 12:56

Given this enum

public enum UserStatus : byte
{
    Approved = 1,
    Locked = 2,
    Expire = 3
}

why does this check always return false

相关标签:
3条回答
  • 2021-01-11 13:41

    The first thing any Equals implementation usually checks is: "is this the right type". And UserStatus is not the same as byte.

    (actually, this only happens because you have boxed the items via your incompatible use of Equals; at the IL level they are indistinguishable until boxed)

    You must compare them as items of the same type. To borrow some code from byte:

    public override bool Equals(object obj)
    {
        return ((obj is byte) && (this == ((byte) obj)));
    }
    
    0 讨论(0)
  • 2021-01-11 13:58

    That is because the Usr.Status contains an Integer and the UserStatus.Approved returns an String i.e., Approved. So, an integer of value 1 can not be equal to the String Approved. So, you must convert the Enum status also to an integer by the following code

    if (usr.Status == (int)(UserStatus.Approved))
                    return true;
           return false;
    
    0 讨论(0)
  • 2021-01-11 14:02

    Because you will have to cast.

    The equals method will check if UserStatus is an int (depending on the type you have defined at the property usr.Status). It will then return that is not (it is of type UserStatus) thus return false

    Better code would be:

    return usr.Status == (int)UserStatus.Approved;
    
    0 讨论(0)
提交回复
热议问题